I personally would view this from two perspectives:
1. how to break the world up into parts
2. how to generate said parts
The first one means dealing with what to generate, and in what order; should districts, buildings/space for them or roads/paths be generated first?
Also, defining the attributes to those types of generative things, like districts maybe having a type like urban, suburban, agricultural, industrial, etc.; buildings having designs or colours, or perhaps more complex features like roof types, etc.; roads being dirt, asphalt/tarmac or something else.
Of course, one can also have unique stuff, that are not procedurally generated as well, like unique landmarks (though they should be checked for some things, like if there are placed or land, or if they'd be in the middle of the ocean
)
The second issue is in so many words, having something big be made from something less. Now i personally don't know much about other solutions, but the most often used one is using PRNGs or pseudorandom number generators to create the world.
Often they are made hierarchical, like i could use one (with its own internal state), give it a seed, and that would generate 5 numbers, and use those as seeds for 5 other PRNGs, and those would generate different aspects of the world. Note that if you always give the same seed to the "root" PRNG, then you'll always get the same world.
You want that, and you want to not store all assets on your harddrive; that's the beauty of procedural generation, it sacrifices some time in exchange for less space... though overly complex stuff are usually not done this way, since it would take too long to generate them.
Keep in mind two things though, you need to consider that the generated values should optimally be in the same range as what the PRNG's seed is. The other is how to actually use the final random number in a meaningful way.
I won't post code either, because i can't at the moment, but i will say, that looking at [wiki]love.math.newRandomGenerator[/wiki] might help with the second point; as for the first, i can only say to experiment.
Edit: I'd also want to add, that you can proc.gen. individual parts of your game, or all of it as well, both separately or otherwise.
Graphics: going down to even the vertices of a model, though that may very well be overkill for a smaller game.
Audio: usually the folley/ambience/background music, not the sound effects, but that could be also
Dialogue: using dialogue trees or more complex structures, since those technically are procedurally generated for npcs; the paths taken, not the sentences themselves. (they could be though, but that would be more complex)
Game Rules: a not-really procedural example would be subsidies in Transport Tycoon/Deluxe/OpenTTD; an event where accomplishing the given goal will give you a bonus. A better example would be starbound's radiation/heat/freeze statuses on such planets; without gear, you'll get damaged.