The lack of expressiveness of HCL is the point and what makes it so good
That's very subjective. Concepts like iterations are inevitable, and they don't look great in a declarative language like HCL.
I also find refactorings considerably harder in a declarative language, since configurations have a rigid structure.
Being able to inherit from Ingress and add a parameter of say public=True/False and then it change annotations, middleware, etc and then being able to re-use that across 100s of stacks is very powerful. DRY is not something HCL is good at.