Currently Blender doesn't have an off-the-shelf solution for this.
Currently ray casting can be realized with the functions from mathutils.geometry:
See also the template
Operator Modal View3D Raycastas an example how to deal with viewport coordinates.
However there is a patch to support defining your own BVHTree you can do ray-casts against.
As an alternative you could use a KDTree written in Python (quite a few exist).
Blender mesh as a proxy
As a workaround you could define a mesh who's only purpose is to perform ray-casts on. You can draw it wire-only:
obj_proxy.draw_type = "WIRE"
obj_proxy variable refers to Blender object which mesh is used as the proxy.
You could support OpenGL selection by reading back the pixels of the buffer to see which face is under the cursor. See
(Am not sure enough of OpenGL is exposed by
bgl to perform occlusion queries, it may have to be extended - though this would require a custom build or submitting a patch for a future release).