In Guix there are first class package objects that have references to other first class packages. Together they form a lazily evaluated graph. At a lower level, package objects can be compiled into one or many derivations, which is where things start to look more similar to Nix again.
In Nix the idea of "functional package management" is more visible as there are no packages but functions with arguments that would result in a package once evaluated.
In Nix the idea of "functional package management" is more visible as there are no packages but functions with arguments that would result in a package once evaluated.