O Apache tem dois modelos para lidar com conexões de clientes: worker e prefork. O Prefork é muito pesado em recursos (requer um processo completo para cada conexão do cliente), mas ainda é comumente usado com o PHP. O Worker é muito melhor do ponto de vista de recursos, mas ainda requer um thread dedicado por conexão de cliente.
O Nginx usa apenas um pequeno número de threads (geralmente apenas um thread por cpu) para lidar com todas as conexões do cliente. Isso o torna mais leve que o Apache e permite escalar e lidar com dezenas de milhares de conexões em uma única máquina.
No entanto, isso não o torna "melhor" que o Apache para todos os casos. Geralmente, é melhor que o Apache para servir arquivos estáticos, mas não conteúdo dinâmico gerado a partir de um aplicativo da Web (ou seja, você não deseja que centenas de conexões sejam bloqueadas enquanto uma das solicitações estiver fazendo uma consulta ao banco de dados). É por isso que você ainda precisa do fastcgi, uWSGI, passageiro ou até mesmo do apache + mod_wsgi + passenger para transferir o trabalho de aplicativos da Web para o servidor de aplicativos. Esses processos de back-end ainda usarão um thread por solicitação, mas, pelo menos, apenas para as solicitações que precisam de conteúdo dinâmico.
Assim, os principais motivos pelos quais o nginx + apache é mais rápido que o apache direto são (A) arquivos estáticos manipulados com muito mais eficiência, (B) carga reduzida em recursos (pesados) do apache.
Finalmente, para a parte "outros benefícios" da sua pergunta: o nginx também lida com conexões SSL mais rápido que o Apache, embora, novamente, isso não o torne melhor para todos os casos. Por exemplo, se você precisar de autenticação detalhada usando certificados do lado do cliente, ainda precisará do Apache para lidar com o SSL. Se você está apenas executando páginas sobre HTTPS para a criptografia, então o nginx lhe dará um pouco de aumento de velocidade.