What we need is tile sections which can easily be substituted into any tileset. The mountain tiles I am working on have 5 (actually unneeded) polygons across both directions. It makes it easy to see where some feature needs to go, and I can pick either block 2: up against the adjacent terrain type, or block 3: dead center. For rivers I can pick block 2 or block 4, and cause the river to flow different directions based on my selection.
If we had road tiles lain out that way for all mostly-flat tilesets, we could just change the grass texture, or otherwise script-replace the road section into the tile. For instance, in a 5 row/column tile, detach and set column 3 on a dummy in the center. Then you can replace the contents on the dummy easily via a command line script, or with a custom tool in GMAX.
If we start thinking of tiles as collections of sub objects, we could move toward a more fluid tileset creation method many of could make use of. Pop out old river section, introduce new one. Remove river, add road. Remove road, add walkpath. Add/remove trees, or replace species based on dummy name. Why stop at texture replacement?