You focused too much on code size on paper, forgetting that your compiled code is far greater than what you're looking at.
First, you make no use of destroy and create members, thus your struct should extend array. Even if you would, its more efficient to write those yourself, or use parent ones if you extend another struct.
There are multiple snippets in jass resources made to cut overall code size in map and improve both, efficiency and code readability. You don't generate many handles with your hash, so Table support should be implemented at first.
Then, deal with indexing your dummies. Jass resources is visited mostly by experienced users, granted they use UnitIndexers. Protection from indexing your dummies should be added. There are many UnitIndexes, but since Nes' one is the most powerfull, you should at least provide:
JASS:
static if LIBRARY_UnitIndexer then
set UnitIndexer.enabled=false
set dummy=CreateUnit("some shit here")
set UnitIndexer.enabled=true
else
set dummy=CreateUnit("some shit here")
endif
Next, I belive there is support for RegisterAnyUnitEvent too =)
After comparing this to DummySpellcast and Dummy Caster, I don't see point of using this over any of mentioned ones. Want to add GUI friendly support? Add functions, dont force them to write:
YourStruct.yourMethod
. Struct and method names should also be improved, look how unpleasant is to type:
MuiDummyCasters.hitXXX // that sucks
FoG isn't the best method nowadays for dummy recycling ;/ Better make use of linked list.
Last but not least, lets talk about globals block. Quote from your lib:
//The DUMMY_CASTER raw ID is the only one you may adjust, NEVER touch the rest!
says everything. Whats the reason of providing configurables when you do not want them to be configurable? Instead, you should split your data block into:
JASS:
globals
// configurables
private constant player OWNER = Player(15)
private constant integer DUMMY_CASTER = 'xcvb'
endglobals
// some free room to clean the view
globals
private hashtable H = InitHashtable()
private group DummyTake = CreateGroup()
private unit dummy = null
endglobals
Now it clearly shows, what user can touch and what he should not.
DEBUG_MODE - o'rly? Look at right top corner of WE menu -> JassHelper. It contains an option to enable debug mode, so additional stuff is pointless.