You can write spaghetti with class components, too. Doesn't sound like a hooks issue to me.
Classes have inherent state, and methods which encapsulate logic. That pushed you to create separate logic bundles.
Functions are callable scripts. There are no rules. I’ve seen too many components that invoke tens of hooks, and hundreds of lines of state management. Most classes I’ve seen never reached that. Were there classes that were too big? Of course, but at least there was logic separation with methods.
You can have self documenting state like class components in the form of reducers which are just state machines. But it is much later in the documentation.