хотя как оказалось они работают только для MZ
Да, директивы называются директивами как раз потому, что это указание ассемблеру что-то делать. Распаковка в память exe файла это весьма нетривиальный процесс. И вот как раз для этого процесса нужны директивы segment. Забавно, что в самом коде нет никакого присутствия сегментов.