Сразу уточню, что возможно я не до конца понимаю о чём речь и не понимаю вообще что такое ".dat" и зачем он в данном случае нужен. Но, суть вашего вопроса напомнила мне мои потуги ~15-летней давности написать собственный архиватор, который мог бы создавать само-распаковывающиеся архивы. В те времена, я достаточно дотошно изучал структуру .EXE-файлов... и в какой-то момент обнаружил, что Вы можете дописывать в конец практически любого (исключения в основном составляют программы проверяющие собственную целостность при запуске) .EXE-файла любые другие данные. Более того, все само-распаковывающиеся архивы работают именно по такому же принципу - в конец .EXE-файла - просто дописывается архив, после чего, при запуске, файл (SFX-архив) читает сам себя, смещая указатель на длину (размер) исходного .EXE-файла (за которым соотв. идёт уже архив).
Иными словами, Вы можете дописывать что угодно в конец EXE-файла не нарушая его работоспособность, хоть TXT-файлы, хоть картинки, хоть BluRay фильм туда добавьте... Делается это максимально просто на любом (ну или почти любом) языке, просто открываете .EXE-файл, в бинарном режиме, на запись, открываете другой файл (текстовый или любой другой), так же в бинарном режиме, смещаете указатель в первом файле в самый конец, пишите данные из 2-го файла. Собственно... и всё. Причём тут конкретно Python - я понятия не имею.
P.S. Кстати да, можете эксперимента ради найти "башку" от любого самораспаковывающегося архива (это которая .EXE) и дописать ей в конец архив, в результате чего обычный архив превратится в SFX/EXE...