(Note: answering my own question as a proper answer had not appeared after several months.)
True compile-time includes does not exist in "native" PHP because the very essence of PHP is an interpreted / runtime scripting language.
PHP accelerators may give the illusion of compile-time includes, but they actually track the state of each included file and redo an include at runtime if the file is edited. Which means that we'll still get a runtime error/warning if the included file is deleted, or if it doesn't even exist in the first place.
However, what's wanted can be accomplished using a PHP preprocessor which replaces all your include statements with their actual file content. This will work as long as the name of the included files are not dynamic strings and can be statically determined. (It's not too tough to write a custom preprocessor if your use cases are simple — e.g. no usage of namespaces etc).
If all that's wanted is to return a 404 page when an include
statement fails, then look for an option provided by the web server. If it doesn't allow such a configuration, the only fall back would be URL rewriting solution as provided by Peter's answer.