Hi Thomas,
A somewhat similar method that I had a (very rough) prototype for, used a .so wrapper for each non-native plugin (I was using python and used most of geanypy) providing the API wrapper for that language. There was a "language manager" plugin for the language which did the initialising for the language (in Python that was PyInitialize).
Note that none of the communication to the plugin went through the language manager, so it was no longer a proxy, each plugin was a full strength first class plugin with all the capabilities (and responsibilities). The wrapper could provide as thin or as thick an adapter as the language needed.
This seemed to work, and so long as the language manager didn't Pyfinalise the plugins kept working after it was closed. What I hadn't gotten around to doing was your proposed communication between the language manager and Geany so the plugins could be in the plugin manager list.
Unfortunately I can't find the code ATM, and may have lost it in one of the disk crashes (backups??) but hopefully the information that it is possible will be useful.
Cheers Lex
[...]