«Один EXE-файл, включающий все файлы проекта», называется сценарием установки.Рассмотрим что-то вроде InnoSetup или MSI.
Использование собственной установочной DLL для кода первого использования теоретически возможно, но крайне уродливо.Это выглядит так: вы добавляете DLL (в архиве, если это возможно) в EXE как ресурсы.При запуске вы пытаетесь загрузить DLL;если вы не можете, вы берете его из ресурсов и размещаете где-нибудь.И это сломается при отсутствии прав администратора.И автоматическое повышение привилегий не будет работать (это работает для файлов установки).И вы должны быть очень осторожны, чтобы ничего не вызывать в DLL перед установкой.Как я уже сказал, очень, очень некрасиво.