The biggest issue with the downloading of widgets into the device on a persistent basis is:
1) Chumby Classic, which has no meaningful amount of storage (the only persistent writeable storage, /psp, is about 2MB).
2) Non-chumby devices (TVs, Android, etc)
In the first case, we could suggest/require that the user run with a USB dongle at all times to provide the storage space. I don't know of a solution for the second case - the Android client is really just a WebView and we could hope that the device is performing at least some caching. The TV case is more problematic - they're typically running a specialize variant of Flash Lite that's a bit less complex than the one in Chumby and may not include any caching at all.
The current post-Chumby Control Panel *does* attempt to cache the widgets for a few weeks at a time. In the case of the CC, what I do is attempt to store them in /tmp, but set an upper limit of 3MB total for the widget cache. For most channels, this works pretty well, but certain large widgets (Screen Clean, for example) and very large channels will blow this strategy.
The second issue is that when the widget is executed out of local storage, it ends up in a different type of security sandbox, and it turns out that Flash's local storage mechanism ("SharedObject") doesn't work properly. A number of widgets use this to try to store certain data across executions in order to reduce network traffic - for instance the NOAA widget will attempt to store the weather station code for the user-supplied zipcode. Some of the RSS widgets try to store "last article read" and/or scroll positions.