While that may be true for an unrestricted language, it doesn't need to be true of the programs we
design. There's no reason that an installer needs to be written in a completely unrestricted way. NPM could use a DSL which would make it possible to review what an installer is going to do.
This is an idea I (with some collaborators) have explored in a more general way for secure shell scripting: shill-lang.org.