Terraform also lets you create abstractions via modules (admittedly with less flexibility than arbitrary code). I'm still not quite seeing the value proposition here over Terraform.
Well, as it was said, it's using a (several) full-fledged programming language(s). If you are a firm believer in the "declarative" ideology you might see this as a drawback. On the other hand I can see from Terraform issues on Github that people sooner or later want something more turing-complete including loops etc. Then you might as well use a real programming language instead of jumping through hoops and trying to emulate stuff like that in your declarative language.
How do you share and publish terraform modules? Can you pip install a bunch of common configurations, and compose them together with your own app?
It sounds like the value add for this tool is being able to describe your infrastructure as code rather than configuration, with all the benefits of code over configuration (diffs, loops, package managers, variables, etc).