This is an armchair analysis but I feel like an ECS architecture here would really take this to the next level (flexibility and performance wise). But that is just my two cents.
Some examples: context dependent rendering, having multiple "types" at once, etc...