Yes you can leverage user defined List Views programatically via the StandardSetController. In two ways, one is utilising the one the platform creates for you or by creating an instance of this class yourself.
Take a look at these questions and answers for examples StandardSetController List Instatiation and setFilterId. Also this one around Custom Buttons that can sit on the standard List View UI and provide a check box UI for free, which is the most common way to use them Creating a custom list-view button that handles multi-record selection.
If you need more flexibility, as mentioned in one of the referenced questions above, you can choose to create your own instance, it's quite an advanced usage though, so consider the Custom Button route first. Here is a code example where you can set the List View (via setFilterId) and effectively reuse the criteria the user has setup using the standard List View UI. A great example of going native on the platform!
string SOQL = 'SELECT Id, Name, Phone FROM Account Order By Name DESC';
List<Account> accounts = Database.query(SOQL);
for(Account account : accounts)
System.debug(account.Name + ', Phone: ' + account.Phone);
ApexPages.StandardSetController ssc =
new ApexPages.StandardSetController(Database.getquerylocator(SOQL));
ssc.setPageSize(2000);
ssc.setFilterId('00BG000000702tj'); // 'Platinum and Gold SLA Customers'
ssc.setPageNumber(1);
for(Account account : (List<Account>) ssc.getRecords())
System.debug(account.Name + ', Phone: ' + account.Phone);
Note: You can enumerate the List View's names and Id's to present a choice to the user or find one you've packaged via getListViewOptions().
Hope this helps, give you some food for thought!