In the classic packaging model, if you made a critical mistake that broke your package (e.g. you accidentally created an unwanted dependency), you had to engage Partner Support to roll back all subsequent versions of your package, which also required everyone using a broken version to have to uninstall as well.
With the new model, you can choose to have those customers that don't want to go through this process retain their version of the package, and all new customers, or customers that haven't upgraded down the broken path, to simply install the new version without affecting any of the other customers, and without getting Partner Support involved.
You can also use this to introduce the concept of a common ancestor package to diverge a product in two or more directions simultaneously. This might happen because you decided that you wanted to use LWC going forward, but wanted to reuse the Aura component names, or completely altering the API in incompatible ways, and the easiest way is to break off to a new branch.
The downside, though, is that the system can't automatically tell which version is an ancestor of another one. You need to tell it which branch it should be using. You do this by specifying ancestors. You can only upgrade a package version from one that has a common ancestor, so it's important to get this correct.