Not sure I understand the issue. Your concern is that glReadPixels will block until rendering is complete but I don't see how you can possibly perform any hit-test before the rendering process has completed, right? Or have I missed the point?
glReadPixels