Long ago I used this in a protein visualization where you could select individual atoms (with 100s of thousands on the screen). I definitely would not want to promise a ray-sphere test that guarantees pixel-perfect consistency with the render forever.
It's what developers went to after the even more classic GL_SELECT render mode was removed.
It's not suitable to happen every frame because the CPU stall waiting on the frame to render is unacceptable. Most engines will do a CPU raycast into the scene. I don't know why that you say it wouldn't be pixel-perfect, because it should be. The math will work out.
When you're dealing with GPUs you're never dealing with just the math. Various vendors make shortcuts in the name of performance so there's a good chance your raycast code doesn't match 100%.
Seen this a lot with "golden image" tests, one vendor's rendered scene has bunch of inconsistencies with another vendor's(or different driver version) causing sporadic test failures.
[0] https://docs.microsoft.com/en-us/windows-hardware/drivers/di...
Generally rendering Geo + Fill is cheap, it's the complex shaders and post that tend to drag down your GPU. Heck, if you're doing GPU occlusion culling you're basically doing the same idea but for rendering whole objects.
You can also do this every 1/10 frames or so to keep overhead low. UE3 and a bunch of game editors use this technique pretty extensively.
Adding one more draw call for mouse interaction, especially one that requires no shading at all, is a pretty minimal additional cost.