I'd suggest you to take a look at this:
http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/
The question 1E solves your problem of intersection between two grand circles. From this you can define the basic operation of your shapes on the sphere without a big dependency like CGAL or GEOS.