For manmade places especially, it might be worth thinking of the problem in terms of a "place grammar" that describes how places can possibly nest inside each other and a corresponding set of functions that can generate random "sentences" (that is, places) that fit this grammar. This can render both of your ideas compatible, so you can use each when they have the right results.
So for a simple example, suppose you have a plot within a town that's 20 by 30. And you call fillRandomPlot(x,y,20,30) which might randomly choose:
- fillWithFence(x,y,20,30), which places a fence and then calls fillRandomPlot(x+2, x+2, 16, 26) to place something inside the fence
- fillWithYard(x,y,20,30), which makes a nice "front yard" of no more than a third of the plot, and then calls fillRandomPlot on the remaining space.
- splitVertically(x,y,20,30) which splits the area vertically, somewhere roughly in the middle, with just plain grass, and then calls fillRandomPlot on each remaining piece.
-
fillWithBuilding(x,y, 20, 30), which draws exterior walls and then starts calling fillRandomRoom...
The actual complexity of your place grammar would be higher, of course, but you get the basic idea. You have a variety of recursive functions at each scale (from setting neighborhoods within a big city to setting furniture within a room), some of which place actual tiles in the tilemap, some of which semi-randomly choose an appropriate delegate function that can fill a subspace of a particular size with something of the appropriate scale/size/density/use, and some of which do both. Some of them will need to systematically "waste" space so that you don't look like you have a 100%-full rectangular city in the middle of an empty grassland :)
Anyway, that might give you a framework to hang your ideas in. The placement functions (on grids or placing things loosely) would just be functions, among many possible functions, that fill space. There's lots of ways to fill space, and you can do them all and them mess with the probabilities until it looks least artificial.