Fala Andre, tudo bem? Espero que sim!
Vamos lá, vou responder por partes:
1 - Como se trata apenas de colocar um texto dentro do botão faz mais sentido utilizar o innerText (inserir/obter texto) do que o innerHTML (inserir/obter html), mas você pode sim utilizar innerHTML.
2 - Quando utilizamos os parênteses após o nome de uma função indica que queremos executa-la ali, mas o addEventListener espera como segundo parâmetro o nome de uma função a ser executada, pois não queremos que ela seja executada naquele momento, e sim quando o evento for disparado, por isso passamos apenas o nome da função para que o método cuide de quando deve executa-la.
3 - Essa função tem um return porque queremos que quando executar essa função retorno pra gente o botão criado, que ja vem nele o evento de click e o nome do botão, sendo assim, sempre que quisermos inserir um botão na tela com essas mesmas características iremos chamar essa função que nos retorna esse botão. Como nas outras funções queremos apenas executar algo e não retornar nada, não utilizamos um return, ou seja, utilizamos o return apenas quando quisermos que aquela função retorne algo ao ser executada.
Espero ter ajudado, abraços e bons estudos :D