Let's just start from the beginning. More specifically, the biomes. Now while you may not have any real "height" since it's a 2D top down game, simulating height can allow you to generate water bodies. If the height of the terrain is less than a threshold, then there should be water. Also, you could generate some temperature and humidity values too.
- High temperature, Low humidity, desert!
- Low temperature, Low humidity, snowy waste land
- etc..
The height, temperature, and humidity values can be generated with perlin noise. Just tweak it enough to get the right balance of biomes. Other structures can be generated based on the biomes. For example, you can't generate trees in the middle of the desert.
This sort of thing I got from how Minecraft generates it's world. You could look further into that if you'd like.