marco has given you a BIG hint. If you don't realize it yet: the compiler code is open, you can study and modify it yourself. FPC is no way like Clang (which is supported by Apple) or GHC (which is supported by Glasgow University). The developers are totally volunteers and they code in their spare time.
Well, I realized that the first time. But generally speaking I don't think that modifying and recompiling the compiler is a good idea. Firstly I'm not a Pascal expert, I have good experience in other languages, but still. Secondly the compiler's code base is huge and is not documented. So I can easily mess up something, that may break code generation for example. And fighting with some new (introduced by me) bugs inside the compiler is the last thing I'd like to do. You know, compiler's bugs is the worst bugs to find ever.
It's always possible. Simply don't do it on the fly, but have original source (-tree) that you run through the preprocessor, and then store in a new tree. Then invoke the compiler.
I think you misunderstood my problem. Lets say I write a simple program, like "writeln('Hello');". The actual code base (the source tree) is one file, but still compiler includes a lot of code from runtime library inside resulting executable. At compile time there is no way for me to find out what units my program depends on (only compiler knows it), so I can't take and preprocess them separately. I can take the whole runtime library, store it with the project and preprocess it all before calling FPC. But the runtime library is huge, preprocessing all pascal source in it will take a lot of time, so compile time will increase dramatically.