I'm basically making a project with all of these things in it. Currently, I'm refactoring this exact part. While, I have these working, they are cumbersome in how they use the editor inspector. I can tell you that in my own journey, I am finding that over-use of nested resources in the editor inspector in conjunction with tool scripts is a recipe for pain. Not because it can't be done. It certainly can, and probably even well. For me, it's because editing those scripts; if I save them in a state that does not compile (syntax error, or otherwise) it can erase all changes I made in the editor inspector. So, I switched to the notion that for many things, it's okay to just have their own script that's an extension of their type. For Abilities, I have the Ability class, and each Ability extends that, and adds its own code for certain simple things. For behavior-related, or upgrade-related things, I use separate Node classes, and apply those like components. So, I can have, for example: A Projectile component, that handles ballistic, seeking or linear projectile movement, and can receive upgrades to projectile-related things, such as speed, number, size, etc...
That's just a taste of it for reference. I recommend leveraging the Node system in Godot for this as much as possible. It's made doing this much easier for me than in previous game engines, frankly.
Tutorials often teach you a "how" for doing things. Most do not teach you a "why" to do them a certain way, or what advantages/disadvantages different approaches bring. If I were you, I'd look for that kind of tutorial (they do exist). Entity-component system tutorials are good. I use a mishmash of patterns, myself, because different ones fit different things more, in my opinion. Some people swear by one or another, though.