The problem is the ips format itself. You can't make a tool with the limited data in the files that does header/unheadered detection except in some rare cases.
For example, if I make a patch that changes a single offset halfway through the file, there's nothing in the ips there to give a clue if I meant to use a headered or unheadered ROM. The info given is "offset, size of change, bytes to change to" and so the position would be valid in both a headered and unheadered ROM.
You could detect if an ips is trying to write to an area beyond the ROM's end, in which case you could assume it needs a headered ROM, but that's a rare occurence.
I would guess you could just make an option that says "Patch requires Header" then it does a pass to add a header -> apply patch -> remove header -> done, just like the TUSH method.