If OpenSCAD isn't powerful enough for you, there's a Clojure wrapper that lets you leverage Clojure to generate SCAD code: https://github.com/farrellm/scad-clj. OpenSCAD automatically re-renders the model when the file changes on disk, so you can essentially have a 3D modeling REPL with this setup.