You do know where the author of Ansible came from right? ;-)
Ansible keeps the task and orchestration layer simple so you stay focused on the problem you're solving vs. focusing some complexity of the tool itself, like a hierarchical data model.
If you need complex logic, use the programming language of your choice and write a module, it's simple and your code can be as complex as you need.
If you need more complex data structures, then simply have Ansible query it from a real database or other datasource, with as complex a data structure as you need.
But at the layer you're expressing what needs to be done, it should be simple and easy to read.