В QGLWidget действительно создается старый контекст, но - все функции из новой спецификации OpenGL вполне нормально работают, по крайней мере на видеокартах от NVIDIA. На ATI не проверял - не было ни возможности, ни необходимости.
лучше разделять контексты (ибо nvidia дрова прощают многое, а вот ati, а тем более intel\via вмогут такого не простить).
также, рендеры для 2.x и 3.x - явно разные(при правильной архитектуре движка) - так что по коду всё-равно разные реализации