It probably wouldn't be that difficult to implements some sort of height mapping on the floors - the most tedious part would probably either be working out the math to keep the player at the right z value at varying positions between vertices or figuring out the best way to generate/layout the triangles in the vertex buffer to make it look nice. I might try making a racing game or something with hills and banked corners for a future project while working my way up to something more elaborate.
The reflections are mostly just a flipped copy of everything rendered underneath the floor. The most complicated parts of that are keeping the vertex buffers optimized while also controlling the vertex submit order very carefully to make sure that everything that needs to look like a reflection is submitted before the floor and everything else after or the illusion breaks in various ways.
Thanks for playing and thanks for the interesting questions!