I gave HexMapper a try. It's what I was looking for. Each hex of a map is a single surface (grass, woods, sand, swamp, etc.) and a single terrain (flat, hilly, mountainy, etc.). But you can select any hex and decompose it into hexes. In other words, turn the hex into a bunch of smaller hexes...