FYI, in Battlefield 2, they slice the geometry along the terrain’s grid lines and diagonally to match the diamond style triangle layout. The triangle soup is then cleaned up afterwards, merging vertices that are close. This is then stored for runtime use, presumably sub-divided in chunks to aid frustum culling. It doesn’t change when terrain LOD changes, they fade out the roads in the distance; the underlying terrain has the roads baked in the texture. You can still see the terrain geometry stick through the road geometry at times (due to geo-mipmapping), but not often noticeable. There’s no z-fighting, they do use glPolygonOffset/glDepthMask equivalent tricks.
Perhaps an interesting alternative would be to pass the spline to the terrain shader, and compute the road UVs from that (find closest point on spline), sample the road texture and layer it on to normal terrain texture. It would be completely geometry - and LOD - independent. IIRC, finding the closest point on a spline is difficult and probably GPU intensive though. I would store the spline data in a texture.