If you're only interested in ARM9 payloads, the only service that needs to be initialized is gfxInitDefault(), this is according CakeBrah: https://github.com/mid-kid/CakeBrah/blob/master/source/main. Note that you should call gfxExit() only after brahma_exit(), though.Do you think initializing these services is required at all? Delebile, for example, does not initialize anything but GFX, and he still uses HID and aptmainloop().
Well, I initialize more services since this seems to be necessary for .3dsx files. I am not sure what is necessary for .3dsx files, BTW.