I think it's worth being careful of your terminology here. If you are using rsync to create a folder structure similar to CRAN, then you are creating a "repository" (not a "shared library"). I.e. a repository of source tarballs (or windows / mac binaries). A "repository" can have just one version of each package, but it can also have multiple, can serve different operating systems, etc. As such, it is a flexible and advisable solution to providing packages to your internal infrastructure.
That said, miniCRAN is just a tool for maintaining such a folder structure. You can also do so through rsync (although beware you will have to traverse the package dependency graph yourself - i.e. what packages do I need to create a functional version of dplyr?) or other tools like drat (a different R package aimed at a similar problem).
A "shared library" is a place where packages are installed. This only allows a single version of each package and is tied to a specific operating system (the operating system where the installed packages were built). Shared libraries are created by using install.packages() or R CMD install, etc. There are some other nuances of a library around build dependencies and linkages that do not exist in a repository too (i.e. if Rcpp was used to build dplyr, then rebuilding Rcpp should ideally require rebuilding dplyr).
All of that said, you can use whatever tools you want to maintain a repository. There are tools for managing libraries as well (the ones I am most familiar with are packrat and renv, although I know I have seen others). I hope that helps! 