What's neat is that you can generate a set of parts once (in code). You then assemble those parts (functions, really) into 3D shapes for visualization. And you lay out those same parts in a plane for 2D fabrication.
The main difficulty I had was that it seems to be necessary to calculate everything. As a simple example, suppose I've got a triangle-shaped part, and stick the flat side of it on a square part. What's the distance from the tip of triangle to the opposite flat side of the square? OpenSCAD knows, in some sense, because it drew it. But inside my OpenSCAD script, I don't, and I have to calculate the geometry in my code.
If there was some way to specify and capture the position of that point (or whatever), then it would be much easier to connect parts together.