That's an interesting point about keeping the config simple. I see how that could be better in many cases.
However with supporting so many ores, the config file will naturally be long if I want every ore to be configurable separately.
It kind of seems like a good idea to expose a CraftTweaker API or something similar for defining further custom ores.
I'm split on this, however, since ore definitions would then be split into two different places, and I'm not sure I like that.
I'm thinking that I'll probably end up using a custom config system, since that seems like it's the cleanest solution.
It will allow all of the ores, predefined by me or added by the user, to be in the same place, while not messing with stuff too much.
I will also think about breaking the config up into a definition file and a customization file, simply to allow a user to have a simple way of customizing how much a specific ore drops while not having to go through the technical details of how the ores are defined.
Anyway, thanks a lot for your input, it was very helpful!
I know that's intentional, that's why I was looking for a way to register block variants (BlockStates) based on the config. That, however, also seems impossible if you don't know how many there are going to be.