It turns out that Mutt's mailing list code is old. It was first written
before the headers List-*: existed, so originally it didn't use any of
them. That explains some things.
Most of the headers List-*: were defined by RFC 2369, published in
1998; List-ID: was defined by RFC 2919, published in 2001. Presumably
it took some years after that for those headers to get out into the
world through mailing list software.
Mutt already had some mailing list code in the first commit in the git
repository, made in June 1998. (Mutt started in 1995.) That included
the command "subscribe", the function <list-reply>, and the expando %L.
Mutt identified a message as having come from a list by comparing
addresses in the message's To: and CC: to addresses from subscribe
commands. If any recipient was an address known to be a mailing list,
then the message was assumed to be from that list. That's how %L found
a list address to display, and how <list-reply> found a list address to
send to. Nothing worked without the user maintaining subscribe commands.
That was a clever way to make things work, but it was not redesigned
when List-*: came along. A couple things were added -- <list-reply> now
sends to List-Post: if that's present, and $auto_subscribe was added,
which scans for List-Post: and emulates a lot of subscribe commands --
but it still works by matching addresses from To: and CC: against
predefined mailing list addresses. Expandos %L and %T (puts up letter
'L') both do that. Mutt doesn't use List-ID: at all.
It sure would be a lot simpler to:
Eliminate commands "(un)subscribe" and "(un)lists"
Eliminate $auto_subscribe
Identify messages from lists by List-ID:
Make <list-reply> only send to List-Post:, and fail if it's absent
There are more complex possibilities, too.