В средах разработки Microsoft и совместимых функции при статической линковке по умолчанию не попадают в таблицу экспорта динамической библиотеки, чтобы они попали в таблицу экспорта (и могли быть вызваны снаружи) необходимо их объявить как dllexport. Т.е. dllexport говорит линковщику, что этот символ необходимо поместить в таблицу экспорта.
Первый вопрос не очень понятен, .lib нужен для того, чтобы динамическую библиотеку можно было подключать к другому проекту так же как статическую, без ручных импортов и LoadLibrary.