Because it actually fulfills the original promise of Nix: Forever-reproducible builds.
Anyone who's ever dealt with a lockfile across any stack that supports that idea in dependency definition, knows how this works and what it's good for.
Using Nix without Flakes is going through 99% of the trouble for concrete, reproducible builds but then dropping the last 1%.
I had my non-Flake builds break like it was a mutable operating system. I just don't get why Flakes aren't the standard.
Flakes provide a consistent entry-point to a set of Nix files (rather than just a hoping that Nix files conform to some convention).
Nix flakes also let you get by with even less worry about the system state: e.g. you don't need to add channels or put your code in your user's overlays directory. You can just use the path/URI to a flake, and nix will take care of downloading all the inputs appropriately.