Both RevitPythonShell scripts and Revit Python Macros are relying on Iron Python.  In both cases, at least in Revit 15, neither require the installation of IronPython.  I believe RevitPythonShell installs with the capacity to process the ironPython script (rpsruntime.dll).  Revit must install with the same capacity.  
Therefore, I assume the two programming environments are being executed from separate sources. Is this accurate?
How would I be able to install an external module as I would typically use pip for?  Another words, if I wanted to use the docx, pypdf2, tika, or other library - is this possible?
For pure-python modules, it could be as easy as having a CPython installation (e.g. Anaconda) and pip installing to that, then adding the site-packages of that installation to the search path in RPS.
For modules that include native code (numpy and many others), this gets more tricky and you should google how to install those for IronPython. In the end, adding the installed module to your search path will give you access in RPS.
Revit Python Macros and RevitPythonShell Modules, or loaded packages