The plugin does cache. Specifically it caches for 5 minutes before it tries to contact Twitter again and even then keeps the old data around until it successfully reconnects to Twitter (trying every 2 minutes until it does). The data is stored as an option with another option holding the expiration time. This is actually per-unique-widget, so if you have the widget in two places displaying different tweets (different user or list, or even just different settings like showing/hiding retweets) then it will store two separate sets of data and make two different requests to Twitter every 5 minutes. This is for the FRONT end of the site where the widgets are displayed.
In wp-admin, on the Twitter Widget pro settings page and the widgets page, it makes calls on every page load because it is verifying that the authorization is in place, getting current rate limits, etc.