DX works well with multiple "packages" within your git project. In fact, I'd recommend this, as it allows easier merging and branching strategies, and you only need to deploy pieces at a time. The Trailhead examples are intentionally simple, because it's not supposed to be an entire org example, which would take much longer to understand.
For example, in our current design, we have tentatively adopted the following design:
- force-app/core: contains core metadata (those shared across all packages)
- force-app/marketing: contains marketing metadata and logic
- force-app/support: contains customer support metadata and logic
- force-app/utils: contains utility components and classes
- ... Other packages that are not dependent on core packages
- src: old metadata API format metadata that has not yet been converted
This design allows us to install just parts of our org in to sandboxes/scratch orgs, reducing the amount of time it takes for us to spin up a new development cycle, as well as minimizing the deployment time by using unlocked packages with dependencies. We can also migrate our code from the old repository format to a new format with minimal fuss as developers are working on older features.
All of this metadata exists in a single repository, so all code is available to all developers, and SFDX allows us to write shell scripts to deploy various configurations to any org, even production.