A Node provides a mechanism for entity definition via composition. The usual method for adding behavior to it is to add components, either out-of-the box components, custom C++ components, or ScriptObject components.
For example, here is a part of the main player character object definition in my own game, Goblinson Crusoe. (Just a portion, for brevity.)
https://pastebin.com/JWLtzAn9
If you take a look at that definition, you see a straight XML document defining the components that comprise a Goblinson Crusoe combat player object. You’ll see some Urho3D components (AnimatedModel, AnimationController) and you’ll see a whole bunch of custom components (Highlighter, for setting a shader highlight attribute on mouse hover; FloatingCombatText for reporting damage numbers; CombatActionController, a FSM-based action controller for implementing movement, attacking, etc…)
Entities such as GC, mobs, trees, etc… are all plain vanilla Nodes, no packaging or wrapping. All of the custom behavior and stuff are inside the custom components. Communication among the various components is a mix of events (if more than one component, or an outside entity, is interested in something) and direct component coupling (where it makes sense, like in animation stances and handling).
In the prototype, all of these custom components were implemented in Lua is ScriptObject classes.
I don’t believe inheritance to be necessary, outside of the minimal amount required in the Urho3D framework to make the component-based system work. Components with event communication provide everything necessary to make disparate and varying objects possible.