If you want a process to be able to create new files but not overwrite pre-existing files, run it as a dedicated user and don't give this user write access anywhere except in some initially-empty directories. That way the program will not have the permission to overwrite any pre-existing file.
If you want to run a program and let it pretend it's overwriting files when it isn't, give it write access only to dedicated directories as above, but in addition you can use a union filesystem such as aufs, funionfs, unionfs-fuse, …, to make another hierarchy appear to the program as well.
If you want to retain all the prior versions of the files overwritten by a process, restrict that process to a copyfs filesystem, which retains all past versions of all files.
If you really need to allow the process to create new files but not to overwrite files, even its own, I don't think you'll find anything preexisting. You could write your own FUSE filesystem.