Em cima da minha cabeça:
Todo sistema operacional moderno usa árvores de pesquisa binária balanceadas para implementar o mapa de memória virtual de um processo. O Windows usa árvores splay, Linux e OS X usam árvores vermelho-pretas e o Solaris usa árvores AVL. Eles fazem isso porque o sistema operacional precisa armazenar o mapa de memória virtual em ordem (por endereço virtual), para permitir inserção e remoção rápidas e procurar regiões não utilizadas nas quais poderia alocar espaço.
Muitos jogos 3D modernos (por exemplo, qualquer coisa que use uma versão recente do Unreal Engine) usam octrees para determinar quais objetos são visíveis para a câmera. Eles fazem isso porque é bastante eficiente calcular quais nós se sobrepõem ao perfil de visualização de uma câmera.
Muitos roteadores (se não a maioria) usam árvores de raiz para implementar tabelas de roteamento. Eles fazem isso porque geralmente é o prefixo de um endereço de rede (ou seja, os bits mais significativos) que é importante, não a chave inteira. Além disso, a pesquisa leva tempo, que depende apenas do tamanho do endereço, não do número de entradas da tabela de roteamento, o que facilita a previsão do tempo.
As tabelas de hash são, é claro, usadas em qualquer lugar. O software antivírus o utiliza para realizar pesquisas em seu banco de dados de malware conhecido, os processadores de texto o utilizam para realizar verificações ortográficas, etc.
As estruturas de dados de gráficos são usadas por planilhas para implementar a avaliação. Pense em cada célula ocupada como um nó e desenhe um arco entre as células se o valor de uma depender diretamente do valor da outra. Quando uma entrada é alterada em uma célula, o gráfico é percorrido para determinar quais células precisam ser atualizadas com base nessa alteração.