Posso estar sendo vago e um pouco superficial aqui, mas acredito que a principal razão de se adotar o Express, é devido ao server com sistema de rotas. É muito chato fazer isso na mão, aqui um exemplo sem framework:

    http.createServer(function (request, response) {
      var path = url.parse(request.url, true).pathname;

      if (request.method === 'POST') {
        if (path === '/hifive') {
          response.writeHead(200,{'Content-Type':'image/jpg'});
          [...]
        }
        else {
         response.end(404);
       }
     }

Já no Express, a coisa fica um pouco mais organizada e de fácil entendimento:


   const express = require('express')
   const app = express()
   const port = 3000

   app.get('/', (req, res) => {
     res.send('Hello World!')
   })

   app.listen(port, () => {
     console.log(`Example app listening on port ${port}`)
   })

Algumas linguagens modernas como o Golang, já possuem um sistema de server e rotas 'built in', mas acredito que o node tem tudo para agregar funcionalidades como essa no futuro.

Espero ter ajudado, sei que é apenas um dos diversos aspectos e funcionaliades do Express, mas na minha opinião, é o que mais se destaca no primeiro contato.

Isso, é verdade. Mas existem algumas bibliotecas e frameworks que já entregam isso quase pontos. Sem contar no Nextjs que já deixa as rotas prontas pra usar. Então se for considerar isso como um ponto para usar o Express, existem alternativas melhores. Ainda não compreendi o porque de ele ser tão usado ainda, mas estou aqui pra aprender.