Most people give up and do orchestration instead at some point.
Fortunately there are not that many things in the world that need to be 100% atomic so you can get away with a lot.
For your own microservices you generally have at least the option of "fixing" the problem properly even if it's at great expense.
But then you hit external systems and the problem resurfaces.
You can go crazy thinking about this stuff, at a certain point most business logic starts to look like connectors keeping different weird databases in sync, often poorly.
Pure crud api? Oh that's a database where client is responsible for orchestration (create folder, upload document...) and some operations might be atomic but there are no transactions for you. Also, the atomicity of any particular operation is not actually guaranteed so it could change next week.
Sending an email or an SMS? You're committing to a far away "database" but actually you never know if the commit was successful or not.
Payments are a weird one. You can do this perfectly good distributed transaction and then it fails months after it succeeded!
Travel booking? runs away screaming so many databases.
etc.