That is one of the most annoying things, that I really don't know why they did the 65816 that way. Why not simply pull RESET vectors from $fffffc instead? In a system where the bank byte is not needed, it would completely be like the 6502, and in other systems you have to take care of 65816 specifics anyway.
I think it's mostly for the benefit of emulation mode. Remember, the 65816 comes out of reset in emulation mode, and interrupts (BRK, IRQ, NMI, RESET) do not push a bank byte so at least the ISRs have to be bank 0. (In fact if you're running in emulation mode in a non-zero bank and an interrupt occurs, RTI can't find it's way home.) It probably wouldn't have mattered much if IRQ, NMI, and RESET pushed a bank byte in emulation mode, but pushing a bank byte would certainly have broken numerous existing BRK handlers.
A second difficulty is that JMP ($FFFC) is one way to "force a reset" (I've seen it used more than once) via software, so the vector must be located in bank 0, since the JMP ($FFFC) would break if it weren't and JMP (abs) would be broken almost everywhere else if it didn't fetch from bank 0 (or Bank B (i.e. the DBR) or Bank K (i.e the PBR) -- since both those registers would presumably be zero when running non-65816 aware code in emulation mode).
There are reasons (perhaps not terribly compelling reasons, but there are reasons

) to come out of reset in emulation mode, but was it absolutely necessary to do so? I say no, and coming out of reset in native mode probably would have gotten around the difficulties above. Coming out of reset in native mode, you'd have to specifically switch to emulation mode, and you could simply copy the RESET vector to what would presumably be RAM in bank 0. (Unless you ignore the bank byte, as you mentioned, and you wouldn't have to copy anything then of course.)
However, by coming out of RESET in emulation mode, the 65816 has to account for the fact that native mode might be entered at some point (and thus a fully decoded 24-bit address space might be present), but that it might be executing code in emulation mode (without having once switched to native mode) indefinitely.
In summary, the 65816 probably could have located all vectors in bank $FF had it come out of RESET in native mode (or the native vectors in bank $FF and the emulation in bank 0, though that seems needlessly confusing), but to me, it appears that the decision to come up in emulation mode means that there are several tricky emulation mode cases to handle, which can be solved by putting the vectors in bank 0, however inconvenient that may be. IMO, it is unfortunate that emulation mode seems to have wound up restricting the more useful native mode.