Basically all that. The unfinished part IMO is mostly for use in developer use cases, and that some ecosystems like JVM are not as well supported.
Can run yes, given that you have to spend some time learning Nix and NixOS specifics. I do that myself.
You either package the software if it is easy to do so—take a look a at nix-init which eases the process—or use Flatpack, containers, steam-run...
Nix files are Nix [function] expressions to declare and set your system; there are many options you can set for example. You just need to learn a few chapters of https://nixcloud.io/tour/ and https://nixos.org/manual/nix/stable/language/, also modularization using imports.
For user/de configuration, you can either do the usual way or use home-manager.