Often it's dysfunction; some stake holder or lawyer, etc., having funded the development of some site, observe that one can 'steal' content with copy+paste and freak out, so the front end developers stick this placebo in to shut them up.
There are legitimate use cases; the classic being 'sort a table by clicking on a column heading', where without 'user-select: none;' (or some other mitigation) the column heading will often end up being selected. Often when one creates a site that involves users interacting with text using a traditional pointer device outside of form controls a need for this will appear.