Пока программа установки и удаления хорошо написана, проблем не должно быть.
Перезагрузка необходима, потому что установщик должен заменить файл, который используется в данный момент. Это произойдет при следующей перезагрузке системы. Вы получите то же самое, когда приложение / служба, использующая файл, будет перезапущена.
Деинсталлятор должен проверить, чтобы убедиться, что никакое другое приложение не требует файл перед удалением его из системы. Я не уверен на 100% в деталях, но я думаю, что Windows (скажем) ведет учет того, какие приложения используют какие библиотеки. Когда деинсталлятор пытается удалить dll, он уменьшает счетчик использования и действительно удаляется, только если счетчик достигает нуля.
На всякий случай, если вы устанавливаете новую версию программы, вероятно, лучше удалить старую версию перед установкой новой версии.