If you need deadlock detection, probably your high level design is problematic. But I agree this is extremely often the case, so that's extremely often an interesting and valuable tool.
Deadlock detection is insurance, not architecture.
You could say the same thing about using a borrow checker. Or a type system.
Independently of how perfect your architecture is, the moment you add a Mutex to your app, you are opening the door for that to happen.
IMO not worth it.
The solutions are well known and I'm simply sad to see them far too little used.
But in the case you insist in doing that (not using architectural solutions, some of which can be checked statically), yes of course runtime deadlock detection is a very valuable tool. I agree that it is even useful if you rely on policy but can't automatically check that they are respected.