In my world, I've addressed this problem through the use of an updater module and the very powerful cmdlet called "Invoke-WebRequest".
Invoke-WebRequest is documented here:
I built a command line app to generate my Powershell script body with all the components I normally use. Part of these components is the loading of the updater module. Once the script has checked that it's running with admin rights and the updater module is loaded, the method in the updater module is called to ensure that the main module is up to date with the latest version. The updater module simply makes a call to Invoke-WebRequest like this:
C:\> Invoke-WebRequest -Uri http://www.sharepointmvp.net/ulsviewer.zip -OutFile C:\data\UlsViewer.zip
The above example simply pulls a zipped copy of ULSViewer down from the internet, so you can test it for yourself. In my case it looks something like this:
C:\> Invoke-WebRequest -Uri http://master-server/Utils.psm1 -OutFile C:\Program Files\WindowsPowerShell\Modules\Utils.psm1