I can't give you all the answers you need, but I can give you two of them.
=== answer one ===
If you decide to use a daemon, there are several non-obvious things you should do. They are listed here:
(Scroll down to the section "Types of daemons".)
Sample code for creating a daemon can be found here:
A discussion of mistakes to avoid when coding a daemon can be found here:
I'm not sure whether I agree with everything they say, but it's still worth reading.
=== answer two
It's not easy to monitor other processes' open()ing of files. The best you can do is modify the code when you have the source available. The next best thing is to hope that software for which you do not have the packages uses shared libraries. Then you need to modify the open() (or maybe __open()) calls to hook up to your daemon if the file does not exist.
This is only a start. You have much more to learn; I'm glad I don't have to!
Hope this helps.