You basically have an ordered list of segments, making the segmented path you have described of that road. To smooth it up, you could simply take the centers of the segments and the points connecting them to create Bézeir curves from them.
Read here for a detailed explanation of how it's done.
Once you describe the path as connected Bézeir curves, it's already smooth. Now you just need to configure the vehicles to follow that path. The easiest way to do that is by generating enough points on the path at run time so you basically get many tiny segments. You can also do a kind of binary search on the curve with the
t variable, by starting with a small increment and then doubling it until it's too far off and then doing a regular binary search over between the too far off value and half of it.
Obviously, generating the spline is more cost efficient amortized.