Well, I personally would track subtile data for every tile. It's not necessarily always roads that might block part of a tile. Miscellaneous props such as rocks, signs, etc... might also block part of the tile. And such constructs don't always have to be part of a metatile setup. A metatile would cover multiple tiles, but something like a rock might occupy only a single tile; nevertheless, it would still have to be taken into account when placing a metatile or other construct near it. Consider this metatile made up of a 2x2 block of tiles:
You could come along later and build a road near it, in a similar curve, meaning that two metatiles would overlap and you would have to check subtiles to make sure it's legal to place the road:
And it's entirely possible that there was a rock already there before the first set of tiles was placed, so when placing that first road you would have to check any subtiles that might block it from being built:
In this case, the rock isn't blocking any subtiles the road needs, so it's legal to build.
A tile should be able to hold any number (not just two) of tile objects, as long as their subtile blockages do not interfere with one another. In this case, all of these objects (rock, road tiles) would be drawn as alpha-blended or alpha-transparent sprites on top of the ground that is already there.
It doesn't really change all that much if you are drawing 3D objects instead of sprites. The objects would still have a 'footprint' of subtiles they occlude, that still need to be checked. The only difference is the way you are drawing objects.
Of course, bridges and crossovers, or any kind of 3D construction, can complicate this, since you might have a train track passing underneath a road or vice versa. In this case, you might need to encode different kinds of information in the tiles, such as the elevation and total height of the occluding piece, to allow roads to be built even though the bridge would occlude the simple subtile footprint where the road needs to go. This can get complicated for a 2D tile representation, but it can be much simpler in a 3D representation since you have access to the actual mesh geometry of the object, and that mesh geometry has 3D information built into it. Placing a road underneath a bridge then becomes a collision test between the bridge and an extruded curve or shape representing the path of the road. As long as you know the clearance of the bridge, the path of the road, and the required clearance for the road to legally pass through, you should be able to make a determination on whether the road or bridge can legally be placed in the tile. (All sorts of things in general, when dealing with tile-based schemes, become easier if you do it in 3D.)