The metadata api source structure has its limitation but it is stable given it is part of metadata API specs, which guarantees full backward compatibility for at least 3 years. That means you can set up build script, CI and everything once without worrying that it will break, at least for a good period of time.
On the other hands, Salesforce DX changes are released every week. How do I ensure my CI scripts and everything is stable. What if it breaks next week ? What if guys at Salesforce decide to change the convention and introduce changes, for instance, all aura components should be placed in a folder named 'aura2' instead of 'aura'.
This is part of the reason I didn't like to rely on the CLI for integration and prefer using API instead. Based on what I've seen, it's awfully unstable.
Take this as an example, CLI update caused force:source:push to spike CPU to 67%: https://bitbucket.org/RoseSilverSoftware/illuminatedcloud/issues/751/high-cpu-usage-on-source-push
Even the format of the sfdx-project.json & scratch org config files are changing occasionally. I am not opposed to changes but what is the end user agreement for backward compatibility using the CLI ? I couldn't find it anywhere.
I'm aware that the CLI has version and it is also auto updated. But We need to understand the full impacts of specs changes too frequently.