Procedurally generating a prefab-based world

Im wanting to make a world that would work similar to this:
Or this: (Overland)

Basically a world that procedurally generates from tiles of prefabs. It will be in a city, so on top of just generating prefabs, how would I be able to generate roads? What algorithms can be used to do something like that?

I’ve a very big noob with programming, but I was able to generate a 2-tri plane today, and then instantiate it to form ten of these planes in a row, each with a new ID (though the ID repeats on two planes). I’m not sure if this is a start or not, but I’ve been going through ways to do this in my head for days and have literally searched for hours to no avail. Any and all help is greatly appreciated!

Does your game level absolutely have to be randomized?

I would prefer it to be, for replay value and the element of not knowing your surroundings.