Как частично объеденить проекты через cистему управления версиями?
По поводу первого. Как я понял, вам просто надо выделить общий код в отдельный репозиторий. Далее, для локальных проектов, делать просто hg pull http://bla.com/main/baseproject
git pull http://bla.com/main/baseproject.git
мержите и работаете дальше. 
Вместо полно пути можно использовать алиасы. Есть и в гите, и в меркурии
Еще один вариант, который лучше - Subrepository. В каждом проекте есть  директория с базовым проектом, и в основном коде проекта вы используете общую кодовую базу (подключаете классы, наследуете от какого-либо базового класса и т.д.).
Выбирайте что больше подходит вам.
По поводу второго вопроса:
Можете тоже отдать на растерзание системе контроля версий, однако мержить будет сложновато, когда изменены строки в обоих репозиториях.
Наилучший вариант, это когда есть три файла:
1. Настройки по-умолчанию в базовом проекте.
2. Файл настроек проекта.
3. Файл настроек разработчика.
По поводу третьего вопроса:
Вам необходимы миграции БД. Это вообще отдельный механизм который правильно сделать тяжело, а жить без него трудно.
Автор, придумал решение? Аналогичный вопрос стоит.