Okay, looked into the dispel issue I was worried about, and apparently:
LDA+Y $E1FA ' UPDATE_FLAGSis adequate to also recalculate weapon stats (I thought it was just for updating weapon visuals), specifically, it includes resetting the actor's weapon element proc, and renders an explicit call via
ORA #04 ' +weapon
STA+Y $E1FA ' UPDATE_FLAGS
JSR $C04530 ' MasterCharacterSetupredundant (MasterCharacterSetup automatically gets called when some other code sees the weapon update flag is set). Whew.
I'll likely be turning Wall bypassing into a data-driven mechanism (some bit somewhere in spell data deciding) rather than the vanilla hardcoded list. I should be able to do so in a compact way that could just be included with any spell hack that wants the feature (where if two write the same thing to the same spot it shouldn't conflict), but it'll be up to you if you want to adopt it kethinov. I'm hoping to over-plan it so I won't ever need to revise it later.
Same idea with the high level spell animations, but that's quite a bit more complicated.
Edit: And I think I already have something for the Wall bypass, though I want feedback on the logic / choice of data.
The gist is, use the spell's target type, specifically overloading the "boy with sword" bit, 0x40, to mean bypass Wall, with a small tweak to targeting code so if the target type is ONLY 0x40, do the "boy with sword" target restriction for the two Mana Magics. So Dispel Magic's (vanilla) target type would change from 0x81 (enemies, multi-targetable), to 0xC1 (enemies, wall-bypass, multi-targetable). Then any other spell could have 0x40 added to let it also bypass Wall.
This only presents a limitation for Moon Energy, since it's ally, single-target (0x00), where adding 0x40 would just make it 0x40. Two unused bits, 0x08 and 0x04 (and technically 0x10, but I use that for the enemy / ally Turn Undead / Dispel on allies feature) could be harmlessly tacked on for Moon Energy (so 0x48 or 0x44) to make it skip the "boy with sword" code, though I may give them a use later so not the safest choice (I also sorta use 0x08 currently in some QuickSpell logic, though that can be rewritten to not need that bit). It seems like a harmless limitation given the benefits of no longer needing a hardcoded list of Wall bypassing spells.
My first pass implementation only requires changing 10 bytes (including the byte for the Dispel Magic target type), and fits in place (it actually leaves 8 bytes free where the hardcoded spell numbers were before).
Another option for maximum compatibility could be to leave Dispel Magic as a hardcoded bypass, so its target type wouldn't need changing, but also with bit 0x40 letting any other spell bypass Wall. There's code space to do this, just seems less elegant than simply changing Dispel Magic's target type.