it is with limits using openscad.
you can use difference(){} to subtract from an stl,
and also create shapes to go with stl.
you can even import several stl files.
translate([0,0,0]) //coordinate for stl to show
import_stl("your_file", convexity = 5); //this is how to import it, either same directory as openscad in example here.
you can combine stl and repair stl in heeks cad, just load stl in heeks cad, import other stl and when finished save it.
programs are free and can be found here:
[
www.openscad.org]
[
code.google.com]