I can’t answer your questions about the choices made during the development of the Zigbee2mqtt integration, but I can answer your question about the UI freeze. This is a known and « normal » limitation of the current implementation of device removal.
When you try to delete a device with tens or hundreds of thousands of states, the database struggles a bit to delete everything in cascade at once, and it can take several minutes to delete everything depending on the speed of your disk. During this time, the instance is frozen because the database is busy (all the bandwidth of your disk is saturated by the cascade deletion).
We have a medium-term solution, but it’s a development. I was recently talking about it here on the forum:
The only thing I can advise you is to just wait ![]()