Sure. All you'd have to do is:
- Make sure your window is set not to erase its background (so the windowing system won't overwrite your GL graphics unpredictably)
- Create a rendering thread (separate from the windowing system's main thread)
- Create a GL context and make it current on your rendering thread
- Render continuously in a loop
However, depending on your app, you might still need callbacks. If your app is windowed instead of full-screen, you'd need a resize callback to adjust the OpenGL viewport, and a paint callback to re-render when the user drags another window across yours.
But since your GL context is always current on your rendering thread instead of the windowing system's main thread, your callbacks wouldn't access the GL object directly -- they'd pass a message to your rendering thread to do it for them.