“Real” water puddles with “real” edges
While most people would recommend a pure shader solution, I'll answer for the case where you want a separate object.
Assuming that your road is a mostly flat plane using a shader to provide fine details, the issue here is that by default Blender converts shader displacement output to a bump map. Bump maps are effectively an trick of the light and will therefore show themselves as flat when viewed at extreme angles or compared with real geometry. To switch to real displacement, go to your object's 'Material Properties'-&gt;'Settings'-&gt;'Surface' and select 'Displacement Only' or 'Displacement and Bump' in the combo-box.
Now, since this is real displacement, you'll need the corresponding geometry to go with it. One way is to subdivide the geometry either manually or with a modifier until you get to the level of precision you desire. While this works, it requires judgement as to the appropriate level of subdivision.
If you are willing to use the experimental feature set, you can use micropolygon displacement to adaptively subdivide the geometry. To do this, you can go to 'Render Properties' and set 'Feature Set' to 'Experimental', then add a 'Subdivision Surface' modifier with 'Adaptive Subdivision' checked.
Caveat: the displacement does not influence physics simulations. For that, you will want to use the 'Displace' modifier which only accepts textures.