Have you tried adding a random querystring to each file reference in your markup? IIS has a nasty habit of caching text files and (even when a full refresh is requested) serving up the cached version on every request. It probably works when you redeploy from Visual Studio because the file is being deleted and rewritten, so IIS sees a new time stamp on the file and serves the new version. A common solution to force IIS to serve the file new each time is to pass a meaningless querystring, which makes think it needs to serve up a new copy of the file instead of a cached one.
For example, if your current links to your css and js files look like this:
<link rel="stylesheet" type="text/css" href="/_LAYOUTS/yoursolution/yourstyles.css" />
<script type="text/javascript" src="/_LAYOUTS/yoursolution/yourscript.js" ></script>
Generate a random number, or use a utc date time stamp and append it as a querystring like so:
<link rel="stylesheet" type="text/css" href="/_LAYOUTS/yoursolution/yourstyles.css?r=123654" />
<script type="text/javascript" src="/_LAYOUTS/yoursolution/yourscript.js?r=123654" ></script>
Just make sure that the number is different on each page load and it will force IIS to get a new copy of the file each time.
Microsoft actually uses this exact trick in SharePoint. If you view the source of any standard SharePoint page and look at the javascript and css links, you'll see a rev=[SomeRandomString]
appended to each filename. That querystring is totally meaningless and just makes sure that you get the most up-to-date version of the files each time.