I think that OpenCASCADE is very difficult to maintain. At least half the variable names are "aMPBLPB" and "aMPBLI", the other half are some strange combination of Russian, English and French. I think that to insulate yourself from the actual CAD engine it would be a good idea to use cadquery, a python library that is aiming to let you switch out the actual CAD implementation without (dramatically) rewriting your source code.
At the moment, I think the two biggest players in the CAD kernel landscape are verbnurbs ( http://verbnurbs.com/ ) and solvespace ( http://solvespace.com ) (which includes parametric modeling and constraint solving, btw). Both are very well written, well documented, and well tested. BRLCAD also has surface-surface intersection for NURBS, although I don't remember all the caveats....