How do they differ from each other in practice (if at all)? What are some use cases that are covered by one of these packages but not by the other?
smartparens has a superset of the functionality provided by
autopair. Apart from providing pair insertion (which is what
autopair does) , it supports manipulating what it calls "hybrid sexps" or sexps in non-lisp modes. It provides commands for navigating, marking, joining, splitting, absorbing and more for sexps among other things.
I personally use
smartparens and found that it provides some overlapping functionality with
yasnippet- ability to trigger pair insertion using a string
change-inner- select expression within matched pair
One basic difference is that
smartparens can match escaped pairs and non-punctuation mark, like
fi; you can also customize your pairs.
smartparens is really great when working regex where there are lots of escaped pairs like
\(...\), since it has its own highlighting for such pairs, making working with
awk... much more pleasant.