You can indeed layer OpenGL content over something like AVCaptureVideoPreviewLayer, but your performance will suffer. Apple highly recommends that you not overlay non-opaque OpenGL ES content on top of other display elements. From the OpenGL ES Programming Guide for iOS:
For the absolute best performance,
your application should rely solely on
OpenGL ES to render your content. To
do this, size the view that holds your
CAEAGLLayer object to match the
screen, set its opaque property to
YES, and ensure that no other Core
Animation layers or views are visible.
If your OpenGL ES layer is composited
on top of other layers, making your
CAEAGLLayer object opaque reduces but
doesn’t eliminate the performance
cost.
If your CAEAGLLayer object is blended
on top of layers underneath it in the
layer hierarchy, the renderbuffer’s
color data must be in a premultiplied
alpha format to be composited
correctly by Core Animation. Blending
OpenGL ES content on top of other
content has a severe performance
penalty.
Honestly, it really isn't that hard to pull in the video as a texture and then display that as a billboard behind your 3-D overlay. My sample application here does passthrough of camera video to an OpenGL ES (2.0) texture for display to the screen. With only a few modifications, you could place 3-D content on top of that. This will give you far better performance than trying to draw non-opaque 3-D content on top of an AVCaptureVideoPreviewLayer.
However, if you are just wanting to display simple static UIViews over OpenGL ES content, that can be done without much of a performance penalty (~5% reduction in framerate in my experience).