This is a really great question. To start, I think it might help if you distinguish between package installation and package management.
Package installation (which is a subset of package management) is all about getting a package from a repository into a library on your computer, along with any of the package's dependencies.
Package management, on the other hand, includes package installation but also encompasses workflows for monitoring what packages are in an environment overtime, with the aim of restoring those environments and reproducing work.
Most tools aimed at package management have some functionality for installation, examples include packrat, conda, and npm. But there are some tools that just do installation, such as pak, pip, apt, and yum.
A big reason R doesn't have as rich an ecosystem for package installation tools (as compared to other languages) is because CRAN's design alleviates many of the challenges traditionally faced in package installation. As an example, CRAN checks new package updates to ensure they work with their upstream reverse dependencies. If updates fail to pass these "revdep checks", the package author must shoulder the burden of getting those reverse dependencies in line. Overall, this ensures that users going to
install.packages get a set of packages that work together. Other languages push more of this work onto the person (and client) installing the package.
However, as the R package ecosystem has grown, and people have developed more mission-critical workflows that require reproducibility, we have seen an uptick in the need for package management (as opposed to installation) tools. This is one reason we've invested in RStudio Package Manager. RStudio is committing other resources to this objective as well, such as an upcoming
packrat replacement, continued work on
pak, and an increase in documentation.