How about having different height values for the terrain so that there are hills (and maybe cliffs)?
Hills:
-ground units move faster downhill, move slower uphill
-ground units and buildings can't see the other side of the hill
Cliffs:
-unpassable for ground units
-ground units and buildings can't see what's on the other side if they're on the low side of the cliff
-dynamically placed on the map if the difference between the height values of 2 adjacent tiles are above a certain threshold