Why don't hardware manufactures design their hardware to solve this problem ?
First let me preface my answer by disclosing that I'm not an expert on PCI express or the low-level implementation of GPU <-> CPU communication. I believe there may be some details on that level that bias the performance in favour of CPU to GPU.
But for the most-part, I believe the bottleneck is at the software/API level. GPUs have plenty of performance available in the GPU -> CPU direction.
Graphics APIs like OpenGL and DirectX are designed to implement a graphics pipeline on the GPU. In its simplest form, the pipeline is a one-way flow of data from the CPU to the GPU to the monitor. These APIs are designed to optimize that pipeline as much as possible so that games and other graphical applications can achieve high framerates.
Despite that, there are ways of retrieving data back from the GPU, for example in OpenGL:
Using these methods is akin to placing a traffic light somewhere along the pipeline. That is because transferring data back to the CPU memory means that data has to be locked. The rendering pipeline may need that memory for the next frame though, so copying shared data back to the CPU every frame is going to force the GPU to alternate between copying the data and processing the pipeline.
The biggest optimization that can be done to avoid that problem is to switch between two or more buffers every frame so that the GPU download does not have to block the pipeline.
I should also mention that GPU compute APIs like CUDA and OpenCL are designed to let the developer have more control over how shaders are used; They do not force you to use them in any sort of pre-made pipeline. It would be possible to generate your waves geometry in a compute shader, copy it back to RAM for physics, and then pass it back to the graphics API for rendering. You can also get compute APIs to interop with graphics APIs so the vertex data can be handed over in the GPU memory itself.