All things being generated can have dependencies on other things, either abstract or physical. For example, generating the physical model for a villager depends on his personality traits being generated. If he has a violent personality he may have some scars and carry a knife. If he's an educated man perhaps he has glasses and carried a satchel of books. His generation may also depend on information about where he lives such as his town or kingdom. Perhaps he wears a pin with the kings crest on it etc.
When it comes to depending on these abstract things such as a species or nation I'm imagining that a list of options is generated that can be chosen from. A world will not have infinite nations to pick from, for example, but a limited number. These are generated and cached early on in a list. The generation then randomly picks an index into this list during the process.
A thing may depend on other physical things too. When generating a wheel for a car it will want to know the maximum dimensions of the wheel well or what terrain the car is intended for. Generating a door for an entranceway will need to know the doorway dimensions too etc.
In these cases what is happening is that somethings generation process is triggering the generation of further child things.. So the car generation triggers the generation of wheels. When it does this it provides a list of constraints for the children that they must meet. Maybe think of it as a high level blueprint. A thing can still be generated without constraints, in this case it randomises values within valid ranges for each constraint.
This means that a seed and a constraints list is required to replicate something exactly. This is good and bad. Bad in that more information has to be saved about something to generate it again, but good in that there's lots more than UINT_MAX possibilities for any given object type (if I use unsigned ints to store seeds). Also the constraints for the children are generated from the parents seed so for a hierarchy of things grouped together such as a car only the parents seed and constraints are required to duplicate them all.
I'll give some more examples of these generation hierarchies in the future to illustrate the process and show where the 'thing generator' editor will come in - I also have to come up with a better name than 'thing'!