You are right this would be complicated.
In fact I can make my custom filesystem compatible by just hacking into the implementation (FileSystem.cpp) and not touching the header file (FileSystem.h). I also had to hack into BinyInput.cpp.
The idea is to have a "layer" between FileSystem and actual file data (which could be "anywhere"). I called this layer "urlfs" (files are "determined" [1-1] by a url, url-schemes are arbitrary; file://, http://, custom schemes for custom filesystems [zipfs://], etc...).
The only issue I have with "G3D::FileSystem" is that it assumes files are on disk as plain files or in a zip file. This leaves no room for implementations of custom filesystems. Nowadays, all games and game engines use some sort of custom filesystem implemented in one or several files on disk.
I cannot ditch G3D::FileSystem because I want to benefit from the excellent work done with the shaders, but I can't distribute said shaders as plain files on disk, bundled with an app.
Ideally we would have:
G3D::FileSystem
vvvvvvvvvvvvvvv
"urlfs" (or any layer that allows seeking files in a custom filesystem)
vvvvvvvvvvvvvvv
actual "files" (on disk; on the internet; in a custom filesystem; anything that can be fetched with an url)
Just my 2 cents lol.
I will work towards a decent solution eventually and propose it here.