Typically, when you start organizing a project into extensions, you rely on behavior properties for your object state instead of object variables.
You would create a dedicated behavior for each object where you handle the object state and the related logic. This way, you only have to pass 2 parameters: an object and its behavior.
For instance this template is organized into extensions and the main events are only about interactions between the objects:
If you want to continue the discussion about GDevelop extension system or give some use-cases where variables are important but hard to use, please answer in the following topic: