Для быстрого ответа на каждый из ваших явных вопросов я бы сказал.
Что касается интеграции, изучите инверсию принципов управления и то, как она используется в целях расширения. Следите за MEF, Microsoft Extensibility Framework. Что касается того, что, ваши точки интеграции будут зависеть в основном от типа приложения, которое вы пишете, и вашей целевой аудитории. Это также зависит от того, какой контроль вы хотите передать третьим лицам. Например, у Reflector имеется отличная, почти широко открытая структура плагинов.
DLL и CABs - это библиотеки и форматы хранения соответственно. Сами по себе они мало что делают. MSI являются одной из форм установщика и могут содержать библиотеки DLL, которые будут составлять ваше приложение. Независимо от типа установщика, чем проще его использовать, тем больше людей попробует ваш продукт.
Сам уровень данных не обязательно так важен. Люди, вероятно, не будут создавать свои собственные слои данных для вашего приложения, и если они это сделают, они смогут использовать то, что им когда-либо захочется, если ваша платформа расширяемости выполняет свою работу. Более важно то, что независимо от того, какой DAL вы выберете, вам нужно проверить, способен ли он работать на разных базах данных, если это важно для вас, и сколько работы это займет. Вы также должны убедиться, что функции, которые вы используете в DAL, работают для всех баз данных, которые вы хотите поддерживать. NHibernate имеет несколько функций, которые не работают во всех базах данных, на которых он работает.