Hallo!
note that the library does not have to implement an object of the same name. e.g. there is no [Gem] object in Gem, but you still can load Gem by creating an object [Gem]: the creation will fail but Gem will be loaded.
yes, an other problem is, that e.g. [zexy] has to be created before [nop] ...
i think that the [using] object should automatically add (an optional) library-prefix to objects that cannot be found. imagine you have a patch that contains [using zexy] (how comes this discussion always concentrates on my libraries...) and [nop]. since pd cannot find a [nop] object anywhere in it's space, it would try to find [zexy/nop] which eventually is an abstraction ./extra/zexy/nop.pd and thus can be resolved and loaded.
yes, two things about that:
abstractions is not guaranteed - there could be nameclashes ...)
python "import nop from zexy" or in C++ "using zexy::nop" ...)
(but I think we already discussed this ...)
LG Georg