I would avoid using CSG for this, the first problem you will run into is the thickness of the terrain. Its hard for a CSG operation to know what the terrain or for all intensive purposes the planes thickness is (seeing how it has no thickness) so there is really no “body” for the other objects to subtract from. Also its a very intensive operation for what you are trying to do.
A better solution for what you are attempting to do in my opinion would be to have a collection of “stamps” that would be the silhouette shapes of the objects you are wishing to place on the terrain. Then you would have some sort of metadata associated with each stamp, that would tell a secondary system how much to “indent” or change the height of the terrain. Basically it would be way easier to modify the terrain meshes vertices other then anything else. If you wanted to get really fancy, you could do dynamic subdivisions as well to make sure in areas that you place more of your elements would have higher vertices counts but that is a different conversation.
This silhouette process would also work well for paths, as you would do the same idea but with some sort of line system to create the silhouette on the fly for the paths.