Of course, there may also be other options I can't think of (something fancy with shaders possibly?). I'm not sure which way to go at the moment.
I hope I can help here, however Disclaimer: I don't know much about OpenGL, if anything. In DirectX I'd do this as a a user clip plane (dx9) or a ClipDistance (dx10+). They're both identical concepts and I know that OpenGL has identical concepts, however I'm not sure what they are so I'm just gooling randomly to fill this answer out. Hopefully this answer helps you start looking for them :)
If the version of OpenGL/GLSL you're targeting supports gl_ClipDistance, you could use those. You need to use 4 planes to define the box that you previously used a scissor for. The clip planes don't even have to be axis aligned, which is a plus point. Hopefully you can just define them to be the same as your previous scissor-rect and then just use the same rotations you did to the gui element to orientat the rects to be exactly the same?
Once you have 4 clips planes describing your clip-box you need to pass them into the vertex shader as 4 vec4 uniforms. You then find the distance between your vec4 position value and the 4 planes. (The clip plane coordinates will obviously need to be in world or clip space depending upon where you do the calculation in regards to your matrix transforms, if you even have any for gui elements. Infact if you do the gui-element's rotation in the vertex shader, you could even do the clip-plane's rotation here using the same rotation matrix?)
IIRC the distance between a point and a plane is just a dot product? Assuming it is, the 4 dot products will give you 4 scalar values, and these are the distances from the 4 planes, aka the 'clip distance'. The HW clips any edge that has an interpolated value <0. So if you have 2 verts, A and B, with a single per-Vertex clipDistance element whose value is -1.0f at A and 1.0f at B, then the HW automagically clips it for you at new position C, which will be halfway between the two :) David Gouveia's diagram above has a nice diagram reflecting this.
Hopefully you can output 4 clipplanes (the documentation refers to gl_MaxClipDistances, but I don't know how to look up a standard value for this. I hope you do :)). If not you can just accumulate the previous values, remembering that any value <0 would result in clipping.
There's also glClipPlane. That might be fixed function -- again, I know nothing about OpenGL. But it basically does the dotproduct for you and outputs the clipDistance itself, I hope. At least that's how the analgous DX functions work. SetClipPlane