I've seen quite a few production queries that use indexes in GROUP BY and ORDER BY; it's quite common. Probably partially because linters/code review/etc are lightweight to nonexistent amongst the analysts/data science types that I tend to work with.
Many dialects already support using aliases in GROUP BY and HAVING too, btw.
IMO it's most useful (though somewhat more difficult to implement) to be able to use the aliases with window functions or large case/when statements, something like
SELECT
page,
SUM(clicks) AS total_clicks,
100. * total_clicks / (SUM(total_clicks) OVER ()) AS click_pct,
100. * SUM(total_clicks) OVER (ORDER BY total_clicks DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) / (SUM(total_clicks) OVER ()) AS cumulative_click_pct
FROM weblog
GROUP BY page;