Olá Vitor.
De acordo com a documentação sobre datamodel, as metaclass podem ser usadas para criar para enum, logging, frameworks, mas seu potencial é ilimitado.
No exemplo do instrutor é utilizado o abc.ABCMeta que na documentação é descrito que ele implementa os métodos class.instancecheck e class.subclasscheck que são necessários para criar uma, Abstract Base Classes (ABCs), que é a base para uma classe abstrata. (Mais detalhes das ABCs podem ser encontrados na documentação sobre abc.
Na classe mãe, Conta, o método passa_mes não é implementando passando essa responsabilidade para as classes filhas que vão implementar ele de acordo com a sua regra de negocio, por exemplo:
Na ContaCorrente o calculo é feito retirando vinte por cento do saldo.
class ContaCorrente(Conta):
def passa_mes(self):
self.saldo -= self.saldo * .2
Já na ContaPoupanca o calculo é feito aumentando o saldo em vinte por cento.
class ContaPoupanca(Conta):
def passa_mes(self):
self.saldo += self.saldo * .2
Agora a utilidade utilizar o método abstrato que vai obrigar as classes filhas é que você garante que as classes filha terão esse método em comum e assim criar códigos que independem de qual das classes estamos recebendo.
O instrutor exemplifica isso criando um código com for que não sabe qual tipo de conta ele está recebendo, mas por termos o método abstract, garantimos que ele não vai chamar um método que não foi implementado.
contas = []
contas.append(ContaCorrente('Igor',100))
contas.append(ContaPoupanca('Cat',100))
for conta in contas:
conta.deposita(0)
print(conta)
conta.passa_mes()
print(conta)
Então basicamente um método abstract você passa a responsabilidade da implementação daquele método para quem herdar da sua classe e também garante que as classes filhas tenham os mesmo métodos da mãe.
Espero ter ajudado, mas qualquer duvida não hesite em perguntar e tambem recomendo a leitura desse artigo para reforçar conceitos de POO(programação orientada a objetos).
Bons Estudos.