Why is the drush views-list command complaining (incorrectly) that views is not enabled?
This is working just fine for me on a d7 site using Drush 5.4.  You are getting that message because module_exists("views") is returning false.  Your next example shows that views is enabled, which implies that module_exists("views") should be returning true.  Perhaps your site is not always bootstrapping cleanly under Drush?

Try:

drush ev 'var_export(module_exists("views"));'


Add on the 'sudo' as you do above, if you really need it.  The sudo does give me pause; I prefer to set up my permissions in such a way as to allow Drush to run without it.  Sometimes sudo changes your environment subtly (e.g. your $PATH may change), although I cannot think of a reason why it would cause you trouble in this instance.  In any event, if the test above returns 'true', then you've stumped me.  If it returns 'false', it indicates that there is something inconsistent or incorrect about your environment.  You'll have to dig deeper to find out what it is.

Edit: I'm wrong, there could be other reasons why you are getting that error, even if module_exists("views") returns 'true'.  It probably boils down to drush_bootstrap_to_phase() failing when called from _drush_bootstrap_and_dispatch(); however, I can't imagine why this would fail for views-list, but work for pm-list.  More data is needed.

Edit 2: Try again with Drush All-versions-5.x-dev (or check out head of master from git).  This is usually the first thing I suggest, but I thought that none of this code had changed recently. Turns out that enabling / disabling a module now clears the cache, but this feature was added after Drush-5.4 went out.  drush cc drush should do the trick in the interim, but you won't need to explicitly do this in the future.