Oi, Paulo, como vai?
Seu projeto ficou muito interessante porque você expandiu bastante a proposta inicial da atividade. Além de calcular a idade, você implementou validação de entrada, separou responsabilidades em funções diferentes e utilizou corretamente o módulo datetime para trabalhar com datas reais.
Sua lógica para verificar se a pessoa já fez aniversário no ano atual ficou muito boa. A comparação entre (hoje.month, hoje.day) e (data_nascimento.month, data_nascimento.day) é uma solução bastante utilizada para esse tipo de cálculo. Também foi interessante o uso do try/except para tratar entradas inválidas. Isso ajuda bastante na experiência de quem utiliza o programa.
Parabéns por ir além do exercício proposto e explorar conceitos mais avançados durante a implementação. Isso contribui bastante para desenvolver organização e reutilização de código. O fórum está à disposição para acompanhar sua evolução.
Para saber mais:
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!