When I first started using HeeksCNC I was totally confused. It seemed overly complex. When I finally understood it, I realized what a great model it is. I still won't claim to be an expert but from my perspective it meets three really big objectives. One of these is compromised in every other solution I've seen:
1) It keeps the computationally intensive algorithms in C++ where they run fast. Other systems that are flexible and customizable are written in interpreted languages and that means they're slow for computationally intensive tasks. Generating a complex path can tax a processor and really needs to be fast.
2) It provides a scriptable interface in a friendly language (Python). No matter how good the developer was, there's no way he can anticipate every need. That's why we like applications like blender, inkscape, gimp, and FreeCAD. These apps assume that the user may want to extend the application. Making the tool path generation accessible through a scripting language unleashes a lot of power.
3) It allows customization for the machine specific output without recompiling. This is the Post-processor. Not all machines are created equal. Different capabilities and different controllers mean the final output must be tailored.
Dan Falck did a great write-up of how Python is used in HeeksCNC to generate tool paths using the C++ libraries. I hope a future CAM workbench for FreeCAD has a structure like this.