Olá, Micaels! Tudo bom? Espero que sim!
A explicação mais curta é que a biblioteca random é um módulo nativo do Python que não é organizado em subpacotes, diferente do matplotlib. Na estrutura do pacote matplotlib é divida em vários submódulos, um deles é o pyplot, já a biblioteca random é um único arquivo random.py que contem as funções desejadas, inclusive a randrange().
Então é por isso que conseguimos escrever:
from random import randrange
Que é o mesmo significado de pedir o acesso a função randrange() dentro da biblioteca random.
Mas não conseguimos escrever:
import random.randrange
Porque não existe uma estrutura de pastas tal que random > randrange, o que caracteriza um submódulo.
Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!