(I wrote it up a few years ago here: https://blog.randomstring.org/2016/09/26/secrets-of-mutt/ )
In brief, you use the limit command to see only the email you are interested in, then use the tag command to do something to those specific messages. Both limit and tag use the same pattern language to specify From, Subject, date ranges, message numbers, or more esoteric searches.
The only thing mutt is not great at is searching multiple mailboxes, and it's easy to integrate an external tool (notmuch, maildir-utils, mairix...) to do that search and link the results into a temporary maildir that mutt will then work on.
Just for clarity: you can just tag without limiting first
> it's easy to integrate an external tool (notmuch, maildir-utils, mairix...)
grep...
Grepping my 47GB mail folder often takes longer than I'd like.
Notmuch is impressively near instant for the same searches.