A menos que você precise de compatibilidade com versões antigas do OS X (isto é, 10.3 ou anterior), eu usaria um LaunchDaemon. O problema de que os daemons saiam muito rapidamente é apenas um problema se o launchd for para relançar o daemon. Se eu entendi seu caso, isso não é relevante. O motivo pelo qual eu usaria um LaunchDaemon em vez de um StartupItem é que o processo de inicialização aguardará a conclusão de StartupItems; Eu não testei isso bem, mas a minha impressão é que até mesmo um StartupItem bastante rápido irá desacelerar significativamente o processo de inicialização.
Então, eu iria com um LaunchDaemon. Apenas certifique-se que o seu .plist inclui:
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
Se o programa gerar todos os subprocessos que precisam continuar em execução depois que o pai sair, inclua também:
<key>AbandonProcessGroup</key>
<true/>
... para evitar que o launchd "limpe" os subprocessos que sobraram.