There's at least one case for which an async reset can't be avoided - to ensure a definite state in the absence of a clock.
Accepted, although I haven't personally come across that situation.
That's quite possible, but the situation can actually happen more frequently than we think.
Even without thinking of anything fancy, just take any design which controls the clock - you may run into this.
Another range of examples is when the oscillator that provides the clock takes more time to start/stabilize than the FPGA takes to be fully configured, which can happen with PLLs for instance.
A typical example I have run into a couple times: designs with several clock domains, with at least one clock domain for which the clock could stop (and start) at any moment, and for which you'd need to put some signals in this clock domain in a definite state when there is no clock running. There is no way you can do that in a synchronous way only. The approach I used was to monitor said clock with a process clocked from another clock domain (in which its own clock was guaranteed to run at all times), then generate a 'reset' signal if it detected the absence of clock in the other domain - reset signal that would be asynchronous for this other domain. This worked fairly well. I can give a concrete example: designs using an FTDI part (FT2232H/FT232H) in synchronous mode. In this mode, the FTDI chip provides the clock for the FIFO - but this clock only gets out of the IC when the IC is put in the synchronous mode, which is software controlled. So from the FPGA's POV, this clock can be in any state (running, not running) at any point in time. If you don't implement this reset mechanism, your FSM(s) controlling the FTDI chip can get stuck in any state and this won't be recoverable.
As you said - even if this looks obvious - an asynchronous reset is asynchronous. In which case you'd need one? Obviously in cases where synchronous resets aren't appropriate.
People used to writing HDL exclusively for FPGAs tend to be kind of biased towards them - which makes sense. So this is particularly true for this asynchronous reset thing due to how most FPGAs are structured. It can be appropriate when writing HDL for ASICs. This is why (unless as others have said, I run/expect to run into issues meeting timings) I usually write HDL that can be more or less used both on FPGAs and synthesized on silicon later on - unless I have a very specific reason not to.
Something "hidden" in that whole discussion (although it has been mentioned regarding initialization) is that even if you don't explicitely implement async resets, most FPGAs have a GSR structure that ensures an initial state upon configuration. Strictly speaking, this can be seen as an asynchronous reset (that just happens to take a different path.)