We can add new talents, attributes, and combat abilities through story scripting! Naturally, this is a workaround, so it does not use existing UI or anything. But the mere possibility is relieving. I had an inkling this was possible, and finally found the right story calls to make possible, thanks to Tinkerer and Norbyte.

The basic idea is a story script that on some kind of trigger, check if you have available talent, ability, or attribute points, and if you do, then cause some kind of effect and remove these points. For example:

Code
IF
CharacterUsedItemTemplate((CHARACTERGUID)_Player,"SKILLBOOK_MetaMagic_31ef33be-86dd-4584-90b7-9981bab237d9",_)
AND
CharacterGetTalentPoints(_Player,(INTEGER)_Int)
AND
_Int > 0
THEN
CharacterAddTalentPoint(_Player,-1);
CharacterAddSkill(_Player,"Target_MetaMagic");


As you can probably guess, I'm considering adding a "Meta Magic" talent/skill, which will let you cast spells in a way that does not affect allies, for example. This will require a lot of additional scripting, of course.

The standard trigger for this sort of thing will probably be "Talent Books." But you could also create special trainers, quest rewards, or what have you, to grant custom talents, abilities, or attributes.

Code
IF
CharacterUsedItemTemplate((CHARACTERGUID)_Player,"SKILLBOOK_NewAbility_31ef33be-86dd-4584-90b7-9981bab237d9",_)
AND
CharacterGetAbilityPoints(_Player,(INTEGER)_Int)
AND
_Int > 0
THEN
CharacterAddAbilityPoint(_Player,-1);
SetVarInteger(_Player,"NewAbilityAdd",1);


Then you'd trigger some kind of ability value check in your character script. Could easily be all done in story scripting too. You'd have to script some kind of effect that goes with this talent, and if you wanted to attach skills to it, you might have to make custom skillbooks with slightly different behavior. Unfortunately, we will still have to use existing ability trees for the actual skilldata entries to sort them in the skill UI and provide attribute scaling, but your custom ability could do all things to affect your new skills behind the scenes.

The same thing can be done with attributes with:

CharacterGetAttributePoints(_Player,(INTEGER)_Int)
AND
_Int > 0
THEN
CharacterAddAttributePoint(_Player,-1);


The one thing that doesn't appear possible is adding new civil abilities, because there doesn't appear to be civil ability checks or calls. But maybe I haven't found them, or is something we can expect to be added.

I'm pretty happy this is possible. It's not the most ideal solution, but it's a more than serviceable workaround. I haven't done ultra extensive testing, so hopefully there aren't any major bugs, but it appears to work fine so far.