Flakes would allow package definitions from different sources play well with each other. This means a bunch of things:
1) Nixpkgs could be broken up into several package sets for better scalability. Eg, haskelPackages and pythonPackages could be broken out into separate repositories.
2) Package authors could provide package definitions along with the source.
3) Companies could have a flake for internal packages without having to patch or overlay nixpkgs.
4) Alternatives to nixpkgs can get started without having to supply all the packages that a user might need.
5) You could even create libraries of nix functions that supply no packages at all, but get used by other flakes to define packages. For example, the machinery for composing a python environment.