There is a GridMap node in Godot. It is basically a Tilemap of 3d. It kind of sucks. But it does have snapping functionality, so it should be enough.
Just like with 2d city builders on tilemaps, You may use two Gridmaps for this, one for basal terrain, and another for the buildings overlaying this terrain. And of course, one large dictionary containing all information in pairs (Vector position : tile content)