This seems like the sort of thing a Configurable would be perfect for. You could make each type of ability be added to a different table.
I don't favor making multiple templates if it can be helped, but if you decide on that method they can all bootstrap the same configurable with different values in the field allowing X number of things for each of the tables.
For an example of a template which bootstraps a configurable (including granting variable numbers of abilities), look at the Ghost.
|