How can I get a new random seed for every object using the same geometry nodes?
The geo-node-network containing the random height functionality is executed only once per instance. So if you're instantiating the buildings from a single object mesh or collection instance it will be all based on the same random value.
I had a simular issue and solved it by creating a collection of instances and letting the point instantiate node pick random items from that list. I used the location of the instance to select a height value, but you can also use it as a seed value.

To get the position of the object within the associated geo-node-network:

Add an empty object at the world origin
Add an Object Info node to your network
Set the offset toggle to Relative
Add a Vector Math node and multiply the location by -1,-1,-1