I use stashes all the time, often when I want to explore two different solutions to a problem.
I also use them when I've lost track of the original code and stashing lets me switch back and forth with ease.
I don't use tags.
Tags can be deleted and recreated, so they are just like branches and not immutable as some claim.
Same goes for stashes. They are commits which can't be pushed. Stashes could be implemented by creating a new branch and committing both with a generated name.
Am I missing something? Do both things provide more value than they add complexity/things to learn? :)
I also use them when I've lost track of the original code and stashing lets me switch back and forth with ease.
I don't use tags.