Falaaaa Victor, tudo beleza? O que aconteceu neste caso foram os espaços contidos na string padrão, observe:
padrao = '[0123456789] [0123456789] [0123456789] [0123456789] [-] [0123456789] [0123456789] [0123456789] [0123456789]'
Entretanto, na string alvo, que é email1, os números não constam com espaços entre si, ou seja, não há espaço entre o 1234-1234, como mostro abaixo:
email1 = 'Meu numero é 1234-1234'
Neste exemplo de código que você postou, caso email1 fosse escrito da forma abaixo funcionaria:
email1 = 'Meu numero é 1 2 3 4 - 1 2 3 4'
Então, para que o seu código funcione, basta retirar os espaços entre as classes de números, ficando então desta forma:
import re
email1 = 'Meu numero é 1234-1234'
email2 = 'Fale comigo em 1234-1234 esse é meu telefone'
email3 = '1234-1234 é o meu celular'
padrao = '[0123456789][0123456789][0123456789][0123456789][-][0123456789][0123456789][0123456789][0123456789]'
tra = padrao.encode(encoding='utf8')
tro = email1.encode(encoding='utf8')
retorno = re.search(tra, tro)
print(retorno.group())
O regex consegue reconhecer apenas o formato do padrão passado, caso tenha alguma coisinha diferente como por exemplo o espaço, já é motivo para ele não dar match. Portanto, devemos sempre ser cuidadosos quanto a isto.Espero que tenha esclarecido sua dúvida :)