luksFormat --header <dev> should support a file rather than just a device.
In cryptsetup 1.6.6, luksFormat accepts the --header option, but only allows the header to be located on another device. In order to put in in a file, I had to:
dd if=/dev/zero of=luks.header bs=1M count=2
losetup --sizelimit 2097152 /dev/loop1 ./luks.header
cryptsetup --header /dev/loop1 --align-payload=0 luksFormat /dev/sda
This should be easier.
(Thanks for your work! :)