The CGXLongOperation class gives the user the ability to cancel many operations that I don't want them to cancel.  Is there any way to work around this?

Yes, try this:

CGXLongOperation theOp;
theOp.SetCanAbort(FALSE);
// Now, call the command which should not be aborted.
// When the called command itself creates 
// a CGXLongOperation object
// it inherits all settings you did specify before and therefore
// also SetCanAbort(FALSE).
//
// CGXLongOperation is a kind of stack.  Every time a method
// creates a long-operation object a new object is created on the
// stack copying all setting from the previous object.
// When the method returns, the object is popped of the 
// CGXLongOperation stack.