Nix being very dynamic, we can actually inspect the arguments that a module wants before providing them (using the functionArgs function, see noogle), and decide what to pass to the function based on what the function expects.
So the fact that you add pkgs to the argument list of the module, indeed influences what will be passed in as the argument set when calling the module.
As explained in the comment in that function, the reason for this is basically that the module arguments are themselves defined in the module system, and so if we would be too eager and always pass every possible module argument to every module, then we’d end up with infinite recursions. So instead we supply only what the module actually needs.
Is it possible to find all arguments I can use without inspecting source code / reading documentation? Some kind of debugging function like builtins.trace to get list of all options?