I'm not a huge fan of json, but seems gdscript doesn't support anything better. As long as there's a way to still bypass that and do it via gdscript it should be fine.
I'm assuming/hoping you're going to re-implement this as more of base and sub classes containing everything relevant/unique to that class/event. So instead of everything that say a Scylla can do is spread out through a dozen files, you instead have one Scylla class that extends the base Race class and adds modifiers etc. that get called elsewhere. Then adding a new race involves creating your own new subclass and inserting it into an array of possible classes. Fine with the exploration events needing updating so your new race appears though, as I think those should continue to be more hand crafted. Though maybe they could define a biome, and classes could define what biomes they appear in (and how often), then some events could just pull from whatever races can appear in those biomes?
This all sounds awesome to me from a technical point, but also not sure how much it's worth it, game seems to be winding down at this point and is still pretty fun as-is. I'm kinda more curious about any ideas on next projects.