Você diz porque não tá interrompendo quando as tentativas acabam? O teste de tentativas só é feito quando o teste anterior é falso, ou seja, quando acontece o acerto.
Pra corrigir tem que tirar esse teste da cadeia de testes:
if chute != numero_secreto:
tentativas -= 1
# print('errou')
tipo_de_erro(chute, numero_secreto)
else:
print('venceu')
venceu = False
if tentativas == 0:
print('acabou')
perdeu = False
Ou testar junto:
if chute != numero_secreto and tentativas != 0:
tentativas -= 1
# print('errou')
tipo_de_erro(chute, numero_secreto)
elif chute != numero_secreto and tentativas == 0:
print('acabou')
perdeu = False
else:
print('venceu')
venceu = False