Personally I would run a blueprint function / blutility to generate the buildings. That way rather than doing it with a construction script you can just press the button and it will do it. Then you could also trigger a different function to re-seed a single building or all buildings etc if you wanted.
You will also probably want to change it all over to instanced static mesh instead of individual static meshes or you will start to hit some performance issues with a large town.
How are you doing your randomization for the number of floors on each house too? Since you are looking at doing different “regions” within a town I think you could have a cool “budget” system for the houses, each component would be a certain cost and each house has an allocated budget they can use to build the house. Could come up with some cool results, using cheaper smaller parts in the poor part of town and bigger better parts in the rich part.