Managing Multiple Mechanics?

This is not easy stuff, you need work more on blueprint to blueprint communication.
I would suggest starting with dispatchers and bluprint interfaces (not umg , but function interface).

You create all needed events in parent character pawn. Each event there should fire up animation or move char etc. Leave logic of what can be done at any given time to either child (inherited) blueprint or components.
With blueprintable components you do similiar, create parent component that has all code to communicate, the ninherit child components and code there each ability. Let them check what state their owner (player character pawn) has. Then put logic of what can be done inside blueprintable component, it should decide if ability can be used or not. If ability can be used and player (person wants to use) that component should send event back to player pawn.

This way when you make single ability and it works you can just add or remove that component from player pawn.

And use blueprint interfaces (again coding ones, not umg) those can be called inside arbitrary classes that implement them, so no need for class checking casting etc. You just trigger interface call message.

And keep trying, more you learn now (at beginning of project) less trouble you will have when it grows.

Also receive all inputs in single blueprint (at some poit you want make custom keyboard bindings) it is better to have such stuff together.
Create event dispatchers, and custom events inside other blueprints. Get input in player character, then call custom event in another blueprint.