Yup, json seems to be what Godot provides the most built-in support for. Json is just the data storage format to separate code from data. The data may be created within GDscript, a tool that writes to json, whatever.
I'm keeping an eye on when the event system re-factor I did hits public testing. If it unpopular or has issues I want to take that into consideration for how I do races. I re-did events entirely as you describe, however. Classes, sub-classes, self-contained code within an event system that is separate from external code. Internal changes don't break code, because events are accessed through defined public accessors.
I intend to do the same for races. I don't want to complicate races too much, but from community suggestions/feedback I'm focusing on a few key issues.
- Dynamic color palettes - both modded and official races define 'default' colors for hair, eyes, parts, but those are extended at run-time based on portrait tags ("blue orcs").
- Separating parts and colors better - leather wings, feathered wings, bone wings + color. Not black_fuzzy_feather_wings.
- Custom body parts - I'm considering some restrictions here rather than a 'bag of parts'. Perhaps more arrays of part types. So modders can put in eyes/sensory organs, limbs (arms/legs/universal?), etc. Wings, tails, ears. Sort of a Mr. Potato-head system. I'm open to better ideas.
- Biomes - Totally cribbin' off of DnD here, but I definitely intend to include biomes in the race definition so that exploration can auto-load new races in the future to the correct biomes without additional coder work.
- Combat/Sex Function - This is something I feel is important, but I don't know how the community feels. I'd like to 'tag' body parts with combat and sex functions. That way two different races can both have 'tentacles', but one tentacle is a 'penetrator' and another tentacle is an 'orifice' or 'both'. Same for having body parts modify 'combat'.
The game winding down does affect how willing I am to commit to extensive changes. Similarly to you, I'm quite curious about future projects, because frankly... whipping up a new game base using Godot doesn't seem *that* hard. It's my first time using Godot and for a turn-based style game it's more than adequately capable. Godot's scripting and C# mono coding is way more accessible than directly coding an engine.