If you know what file your subprogram will try to read on, you can create a pipe via mkpipe and feed the program from that pipe. If you don't know what files the subprogram will try to read from, I fear you'll have to go the route of a user-installable filesystem via FUSE, or by going the roundabout way of installing Samba, Samba callbacks and then mounting the Samba share into Linux.
A second approach could be to override the system calls if the subprogram loads the C library dynamically and redirect the system calls into your program, much like FUSE, but completely in user space.
Neither of the solution is an in-process solution, unfortunately.