Well, a few things.
(A) Immutable systems are more powerful when you can express complex application configurations using some sort of CM system — take your pick. This allows more code reuse in an organization. My most recent work was with a shop that used a nearly 100% immutable systems setup but it was important that everyone used the same Ansible roles to ensure certain things were set up the correct way across a wide fleet of microservices.
(B) Ansible servers as an orchestrator as well as simply configuring machines. So if you need to cleanly write a rolling restart across a load balancer, you can do that. Even in mostly immutable systems, hot fixes are going to be neccessary
(C) Particularly in areas where data storage is involved, not all infrastructure can be 100% immutable. Think about zookeeper servers, databases, etc.
Disclaimer — wrote Ansible. I do believe in immutable systems, but I don’t believe in describing 100 different microservices in copy/pasted bash as much either.
I’d advocate immutable approaches, but all of the above tools can be used in both immutable and non-immutable ways, and there’s always a grey line between them.