Я вижу 2 или 3 основных варианта использования для создания отдельных доменов приложений:
1) Процессоподобная изоляция с низким использованием ресурсов и накладными расходами. Например, это то, что делает ASP.NET - он размещает каждый веб-сайт в отдельном домене приложения. Если бы он использовал разные потоки в одном домене приложения, то код разных сайтов мог бы мешать друг другу. Если бы он размещал разные веб-сайты в разных процессах - он использовал бы много ресурсов, а также межпроцессное взаимодействие относительно сложно по сравнению с внутрипроцессным взаимодействием.
2) Выполнение ненадежного кода в отдельном домене приложения с определенными разрешениями безопасности (это фактически связано с 1-й причиной). Как уже говорили, вы можете загружать сторонние плагины или ненадежные библиотеки в отдельные домены приложений.
3) Возможность выгрузки сборок для уменьшения ненужного использования памяти. К сожалению, нет способа выгрузить сборку из домена приложения. Поэтому, если вы загружаете какую-то большую сборку в основной домен приложения, единственный способ освободить соответствующую память после того, как эта сборка больше не нужна, - это закрыть приложение. Загрузка сборок в отдельный домен приложения и выгрузка этого домена приложения, когда эти сборки больше не нужны, - это решение этой проблемы.