To avoid having to redeploy to shinyapps.io when you want to change something in your code, you'll have to setup each app to pull in code from an outside source (not hosted in the app directory on the shinyapps.io server).
As @PirateGrunt and @cderv mentioned, you can achieve this through private packages on github or APIs with plumber and have your app call them each time they run.
If you're unsure about either of these options, another would be to host a .R file on dropbox or googledrive with all the functions and modules your apps require. You can then download the file into your app's environment using the rdrop2 or googledrive package with a cached auth token, then source it in your server and ui files.
Any changes you make to the code in your file hosted in the cloud will then be ported into your shinyapps without having to redeploy the whole thing to the shinyapps.io server.