That’s only for functions. Variables should be inherited if you set them to be (I assume BP allows that).
Yes, Actives are limited to “one at a time” because it’s such a common use case. Rather than have some looping ability for Race, I would likely just have an Ability that runs when the Player starts (OnBeginPlay or some such), and just have it apply the tag. You can re-apply the Ability on level up if you expect it to do something fancy on certain levels, etc.
I don’t understand this question. You should be passing in an Ability Class -> Get Ability Object From Class -> Create Context -> Activate Ability. Are you asking if you can do it in C++? Sure. Everything that runs in BP is actually just C++ under the hood. Just grab the UClass for the Ability -> Grab the CDO -> Create Context -> Call Activate Ability on the Ability Component.