Dagger originally started with CUE, and is still powered by it under the hood, which has the constructs you mention, while also being turing incomplete.
I don't understand this move to define infra and CI imperatively, and tool vendors moving to support umptine languages for their users... Say what the world should look like, not how to get there?
Looping in ansible/terraform is exactly the problem. Logic and control flow in YAML/hcl is a nightmare. Plus there's no debugging! You can't set breakpoints in a yaml file or HCL.
Adding more YAML to be parsed by other YAML is just terrible at scale.
I don't think there's a meaningful distinction between configuration and code in a CI pipeline. This is what people try to do, and it's frankly a massive waste.
The problem is the attempt to make a distinction when there cannot be one.
I'd say that non turing complete languages are a bad fit for pipelines. Even mildly complex pipeline will eventually have loops and conditionals.
Better python than some originally-a-config-YAML language turned into an imperative monstrosity with loops and conditionals bolted on.