This city renderer seems too slow for me for large citys and not optimized for procedural terrain when anyways there is a overhead for the surrounding terrain.
Rather i would predefine the buildings, because of speed, and if i had a planet renderer (i had one) then replace the output of a noise routine within a certain area to in the 1st step to be flat terrain, in the 2nd step the height values which are generated by the noise routine (could be at start very basic one like PI+offset i think) define the type of building and in the 3rd step build from the 3D data of the buildings for every building “local” “noise” that will grow with eyery LOD you come more nearby to the max vertice count of the 3D data. It is like “generating the buildings”. the textures would be a second problem, but i would just focus on the vertice data.
well in additional steps , one could go and generate the 3D building data which is the input for the noise routine from predefined sub 3D data to randomize the buildings more.
I have not thought about the streets, i think of course we need streets because civilians run along and i think even in far future there will be cars, because e.g. no one in present time stops playing soccer because this is so easy to play you just need a ball, therefore there will every time exist guys which have no money or driving license to buy an expensive hovering vehicle, anyways it looks more populated if you put some cars , persons and trees into the street, if you are at the very highest LOD, you would anyways because of your viewport near ground see only 1 to 10 buildings at the same time.
Later maybe if you build a city at a shore you could place a habour and ships for example in it if you have the 3D data.