The only thing it does is extend the lifetime on the guard to 'static. That makes it usable in more situations. I suppose the biggest downside might be that this makes it more trivial to "leak" the lock (e.g., storing it in a global cache without an invalidation policy) thus starving other waiters.
They are a bad idea in both sync and async code, but in async code you, often, don't have a choice because you want to keep lock while calling some function which-is-usually-very-quick-but-compiler-doesn't-know-that (and sometimes said function may not be quick at all).
If you really need them in sync code you can use parking_lot, but most of the time it's bad idea.