I created my own "standard" for loading scripts and such as addons... very different from your approach. Extensions are irrelevent... so I don't use them... rather this is my approach...
Every "script" in my package requires a dedicated "object/class" identification for the first line. Examples...
The top level script uses this...
; #== smirc -rs root.root;
A common list of functions uses this...
; #== smirc -rs base.commons expands group root;
The script responsible for sounds and such uses...
; #== smirc -rs base.soundman expands group root, class base.common;
; #== smirc -rs plugin.awaysystem expands group root, base;
; #== smirc -rs base.gui expands group root, class base.common;
; #== smirc -rs plugin.cloneman expands group root, base;
To make sense of this... I'll explain what all this represents...
The -rs is just the remote script identifier. Then <class> which is made up of <group>.<classname>. Everrything with a . is always a <class>. The "expands" keyword is for determining order. expands group <group> means it belongs after <group>. expands class <class> means it belongs after a particular class. Each script is a class. Each group consists of multiple classes.
When first scanned all this information is loaded into a hash table. Like this for example.
FILE=c:\mIRC\smIRC\base\menu and gui.smirc
Instead of a UID as you use, I just generate a 32 bit hash id from the class id.
There are embedded keys within the script file itself for determining things like name, author, etc. They're embedded like this...
These aren't necessary and I actually use them for defining constants that the script itself uses.
The whole idea here is each script is self contained. Only one file (the root file) is required. And if it's unloaded by accident or something i have failsafes to keep things from going out of whack.