Одна из причины - то, что пользователь будет в состоянии изменить список, и владелец списка не будет знать об этом, в то время как в некоторых случаях это должно сделать некоторый материал после добавляющих/удаляющих объектов к/от списку. Даже если это не требуется теперь, что это может стать требованием в будущем. Таким образом, лучше добавить AddXXX / метод RemoveXXX владельцу класса и представить список IEnumerable или (который лучше, по-моему), представляют его как IList и используют ObservableCollection от WindowsBase.
Вот цитата из документации MSDN о классе ThreadPool :
Для каждого процесса существует один пул потоков. Пул потоков имеет размер по умолчанию 250 рабочих потоков на доступное процессор и 1000 операций ввода-вывода потоков.
В IIS6 и IIS7 любое данное приложение ASP.NET размещается внутри одного процесса ( w3wp.exe ) через инфраструктуру пула приложений.
Пул приложений может содержать несколько веб-приложений. сохраняя их в разных доменах приложений, но он выполняется внутри одного физического процесса на сервере.
Эти два факта на практике означают, что все потоки из запущенного экземпляра веб-приложения выполняются в одном пуле потоков .NET.