For performance, it's possible to write code that triggers hundreds of state updates and rerenders as a side effect.
While it's not common, you could imagine something like a websocket connection pushing state updates every 10 millisecond.
While throttling or debounce would probably be necessary here, you could use immer as part of that process to freeze the state until you're ready to update.
You can think of it like batch processing the changes to reduce the number of renders, a little like how React Hook Form reduces re-rendering.
The other benefit of immer is like the benefit of const but for deeply-nested objects -- you can create readonly objects that you won't accidentally mutate. Since accidental mutation is a common bug, then some people love a true immutability library like immer.