You can do this using the shrinkwrap modifier. Add a Shrinkwrap modifier to your road, set it to Project mode, limiting the axis to Z and checking Negative under Direction. You will need some offset to keep the road from overlapping with the terrain. There will be a gap that can be filled by extruding the entire road downward on the Z axis or using the Solidify modifier if you want to do it non-destructively.
While doing this I noticed that with any kind of steep terrain the road looks weird because it's ungraded, following the terrain too closely. If this is a problem you can shrinkwrap the road to a smoothed copy before solidifying it. Create a copy of the terrain, add a Smooth modifier, limit it to the Z axis, set the intensity to about .5 and the iterations to around 20. Play with these settings until you get something that looks right in your case.
My example graded road has to stick out the ground to avoid overlapping with the terrain and it's a little taller than I'd like. To get it any closer the underlying terrain has to be smoothed where the road will be. To do this, manually select the vertices under the road using circle select, assign them to a vertex group, add a smooth modifier to the actual terrain and set it's vertex group to one you created. You can use similar settings to the ones above. Now the graded road can be moved further down. In some cases we won't need a second terrain and can just shrinkwrap to the partially smoothed terrain, but by using both we get fine control over how the road and terrain meet each other.