It would be completely new to me that it was possible to lift this limit. To my knowledge, this limit is hardcoded inside the .exe.
There is a call CharacterAddSkill() for character scripts and an Osiris call CharacterAddSkill((CHARACTER)_Char,(STRING)_Skill) that might be able add a spell independent of this limit but I have never tested it, I only used the Osiris call to add spells of the 'None' school.
The limit itself cannot be lifted, but the limit might only affect the learning of spells from skillbooks. Scripting might be able to circumvent the limit. Try it ...
Edit: there is no Osiris call to remove a spell, only a character script call.
... That's why I had to build some event communication between Osiris and char scripts to remove the second Tornado I gave players when they learned Tornado after Tornado was unlearned in XC_Bags. And it had to be done in a 'weird' way because there's no 'Skill unlearned' event ;-)
To try script adding, you should learn Osiris and then build some code like
(I'm too lazy to look up the exact calls, maybe there is not even an event CharacterUsedItemTemplate() or it has different parameters, or there is no ItemHandleDestroy(), whatever, it's just the coding principle.)
IF
CharacterUsedItemTemplate( _Char, _Skillbook_Template, _Handle )
AND
DB_SKILLBOOK_TEMPLATE_SKILL_CORRELATION( _Skillbook_Template, _Skill )
THEN
CharacterAddSkill( _Char, _Skill );
ItemHandleDestroy( _Handle );
without actually knowing before if the engine would not reject this call as soon as the limit was reached.
You also have to modify the use action for all skillbook templates from 'Learn Skill' to a simple 'Use' because the engine will probably not even allow the action when the limit is reached and Osiris will never receive the use event.
With this, you completely replace the standard way of learning skills and do it with your own script.
As written above (symbolically), you might want to imitate the standard behaviour by removing the skillbook after the spell has been learned. The code above - if the call ItemHandleDestroy is even correct - does NOT do that, it would remove the complete stack of skillbooks of that type you might have in inventory.
You'd have to remove a single instance of the stack away to some hidden place (and possibly destroy it there).
You might also want to build a check if a spell is already known and skip the whole processing if known already.
It's also very hard to make any text output, so you have to build workarounds to provide some feedback about success or failure (e.g. if the skill is already known).
And of course, any query about the player's ability level is also required, because the simple code above does no check for the ability level or if the ability (Hydro, Pyro, etc.) is even known by the character. You need to keep a per player 'knows-skill-x-database'.
I'm sure I have still forgotten quite a lot of things that need to be considered.