I prefer the stencil do restrict rendering to a given region of the screen. Scissor has some drawbacks, for example that you need to specify it's region in window coordinates and (as Paul said) you're restricted to a single rectangular region. So some time ago I removed all scissor-stuff from my GUI and replaced it with stenciling. It's a bit more code but offers more freedom and allows you to clip out any shape you want and even do CSG on your shapes to clip out complex areas (it even allows you to cut out threedimensional areas, see here) :

Code:
// Clear the stencil buffer (usually done at start of rendering)
glClear(GL_STENCIL_BUFFER_BIT);

// We fill the stencil buffer now with the shape that we want our stuff be drawn in
glDepthFunc(GL_ALWAYS);                           // Don't care about depth values for our stencil shape
glColorMask(False, False, False, False);          // We don't want to see the shape, so we disable rendering to the color buffer
glEnable(GL_STENCIL_TEST);                        // Activate stencil
glStencilFunc(GL_ALWAYS, 1, 1);                   // Write to stencil, no matter what's currently in place and set it to 1  
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);        // Control behaviour of stencil writing, for our scenario, only the last value matters. GL_REPLACE means that our shape sets the buffer to 1 where it's drawn 

// Draw the shape in which you want your stuff below drawn here
// Can be of any complexity, you could even create a chess-board cutout, a real 3D-coutout, etc.
// You can do a simple GL_QUAD, GL_TRIANGLE or render a 3D-model here
DrawPlainRect(0, 0, 0, Width, Height);

// Now we're going to render our scene / objects so that they're only visible where the stencil was set by our shape
glColorMask(True, True, True, True);              // Needs to be enabled again, as we want to see our object
glStencilFunc(GL_EQUAL, 1, 1);                    // Now we only want to draw where the stencil buffer is 1 (as set by our shape), the rest of our screen contains zero
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);           // No change to the stencil buffer
glEnable(GL_STENCIL_TEST);                        // Activate it
glDepthFunc(GL_LEQUAL);                           // Restore our normal depth test

// Render anything here you want to have stencilled out

glDisable(GL_STENCIL_TEST);
See the comments for how the stencil actually works. It's pretty complex and not only limited to restricting rendering to a certain area. You can even use it to count pixels and stuff.

And though this is a bit more code than the scissor stuff, it's extremly flexible. E.g. by just replacing glStencilFunc(GL_EQUAL, 1, 1) with glStencilFunc(GL_NOTEQUAL, 1, 1) for rendering your scene, you'd render only "outside" of the stencil shape