Transformations meant to position the universe with respect to the camera are viewing transformations. Transformations meant to position objects in the universe are modeling transformations. Generally when drawing an object O we should arrange for the MODELVIEW matrix to contain the product CM, where C is a matrix representing the current viewing transformation and M is the matrix representing the modeling transformation used to position object O in the world.
Moving the universe with respect to the coordinate system of the camera (that is, flying) is a transformation in world coordinates. That means it can be accomplished by left-multiplying the current viewing transform by the matrix for the desired transformation. Left-multiplying a matrix is kind of a pain in OpenGL. Here's an example, in which the current viewing transform is kept in a matrix curview:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRotate3f(10.0,1.0,0.0,0.0);
glMultMatrixf(curview);
glGetFloatv(GL_MODELVIEW_MATRIX,curview);
glPopMatrix();
This causes the camera to pitch up by 10 degrees. The glGetFloatv command stores the transformed viewing matrix back into curview, so that next time we draw the universe we draw it moved.
Since we want the background to respond differently to user input (rotate, but not translate), we can store the viewing transformation for the background in a different matrix, say bgview.
Before drawing all your foreground objects (spherical planets, space station, tentacles), the display function loads curview into MODELVIEW:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(curview);
This positions the universe with respect to the camera. Now you want to position object with respect to the universe using modeling transformations.