Boa tarde, Jorge! Como vai?
Vou responder suas questões por partes.
Se a intenção era deixar o código mais legível, porque criar duas funções (moveFrame() e nextFrame()) dentro de outra (createSprite)?
Separar melhor as responsabilidades entre as funções. Enquanto a moveFrame()
sabe como passar de um frame X para um frame Y a nextFrame()
sabe especificamente como passar de um frame Z para o frame seguinte Z+1. Perceba que são responsabilidades diferentes!
Além disso, por que restringir o escopo destas funções à função createSprite()?
Além disso, é uma boa prática criar estas "subfunções"?
Sim é boa prática, em determinados casos (como esse abordado pelo mestre Flávio em seu curso). Ele fez isso pq o JS só tem 2 tipos de escopos: global e funcional. Se uma função está em escopo global ela pode ser alterada por qualquer outro código JS que seja carregado. Agora, se uma função está dentro de outra, então a subfunção estará encapsulada de modo que não possa ser alterada em escopo global!
A forma como vc irá desenvolver irá depender da situação que vc estiver inserido.
Pegou a ideia? Qualquer coisa é só falar!
Grande abraço e bons estudos!