I believe the best solution would go something like this:
o) Implement a 'lib' object that does what -lib does on the command line when banged.
o) Add the feature to the lib object that when it is given pairs of names it maps one name to another. So you could write something like:
[loadbang] | [lib maxlib gauss maxlibgauss] | [lib footils gauss gauss]
I'm not sure to what extent we could change things on the fly, since I'm not sure of how names are looked up internally, but it could be that subsequently sending [coll maxcoll( to the [lib maxlib] object would change the binding dynamically.
We don't really need namespaces, just a way to disambiguate names at load time.