Yep, the way unity handles serialization often forces me to use a gameobject + monobehaviour, so we end up with some hierarchy of gameobjects that function together.
In many cases this hierarchy is kinda "loose" means most special setup is done on the root object and several subobjects add functionality. I did setup common operation this way that if i look for a FSM or component i first look on the same gameobject, than the parent and finally the root, if this fails i look from root inside all childs.
This logic works so far and i don't need to setup special references for my common behaviors.