This could be solved for instance with http://dokan-dev.net/en/ , which is basically FUSE for Windows.
It could work by intercepting new "open()" calls and redirect it to the actual new file, while keeping the old one until all references are closed and then delete it. A lot of work, but not impossible.
One could argue that it is cheating, since Dokan has a driver component.
The other way would be to patch Cygwin itself, enhancing its file layer to do the magic described above. Also cheating perhaps, but cleaner since it would be a 100% user space solution. Might pay to talk to the Cygwin maintainer, he may have ideas about it. Last I emailed him (a LONG time ago) he didn't see the point, when he had a perfectly working package manager as it is.