While I'm typing my next round of questions, and based on the feedback in this thread, here is the list of use-cases that I could gather.
1. Gain early access to experimental or unstable features
(e.g. because they're working on a research prototype, or because
the feature is valuable enough to them to forgo some stability)
2. Restrict the use of more complex features (e.g. for easier
onboarding of new developers or as educators to teach a
well-delimited subset of the language)
3. Restrict the use of novel features since the last established
standard/report.
4. Restrict the use to features that they don't like (e.g. controversial
features like RecordWildcard or ImplicitParameters)
5. Name/refer to a particular feature when talking/writing/searching
about it.
6. Restrict the use of features which require support from outside
the Haskell ecosystem that can't be taken for granted (I think this
concerns only UnicodeSyntax)
7. As library authors, to signal which features the library actually
uses, hence which version of GHC the library is compatible with.
8. Retain access to deprecated features to smooth out migration over
the deprecation period.
9. Retain access to deprecated features indefinitely.
10. Change the default behaviour of (part of) the language
(e.g. StrictData, I think some of the dependent Haskell work falls
in this category, but I can't pinpoint an example)
11. Extend the language in a way that is not backward compatible
(e.g. OverloadedList, probably some dependent Haskell things too)
12. Enable features whose mere presence has a performance impact
(e.g. Template Haskell, and that's probably it)
13. CPP (this one is very unique isn't it?)