Constant Contact's segment builder lets you combine several kinds of criteria into one group: contact details and custom fields (industry, location, anything you've added), engagement history (opened or clicked a specific past campaign, or hasn't opened anything in a while), list or tag membership, and purchase activity if you've connected a store.
A segment built this way updates itself as contacts meet or stop meeting the criteria, which is the real advantage over manually sorting a list by hand. Someone who opens your next three campaigns gets added automatically; someone who goes quiet drops out the same way.
The limit is scope. A segment can only react to data Constant Contact already has. If the thing that should actually move someone into a group is a loyalty tier calculated elsewhere, a support status, or a purchase that happened in a system that isn't synced, the segment has nothing to check against and simply won't update.