Oi Vinicius, tudo bem?
Vamos lá:
1º) Na função abertura (), será exibido a mensagem de abertura contida na função;
2º) A função escolhepalavra (), atribuirá a string "MELANCIA" a variável palavrasecreta, que agora "vale" MELANCIA;
3º) No loop do...while, será invocada a função desenhaforca().
Essa função faz o seguinte: primeiro ela printa a quantidade de tentativas que o usuário já efetuou. Depois, ela invoca a função jachutou() passando como parâmetro para ela a variável palavrasecreta na posição do indexador i, ficando jachutou(palavrasecreta[i]).
A função strlen varre a string e retorna a quantidade de posições que ela possui, então no caso a palavra MELANCIA, retornará o valor 8.
Como o usuário ainda não chutou nenhuma letra, a função cairá na condicional "else", imprimindo os 8 underscores (_ ).
4º) Agora será invocada a função chuta(), onde o usuário irá informar a letra que ele deseja chutar. Essa letra, será salva na variável chutes, que é um vetor de 26 posições, contemplando assim, todas as letras do alfabeto.
5º) Como as condições do while não foram satisfeitas, o loop se reinicia. Quando a função desenhaforca() for invocada novamente, automaticamente a função jachutou(palavrasecreta[i]) também será. Agora, como o usuário já informou uma letra, a função jachutou() pegará essa letra e irá comparar com todas as posições da palavrasecreta. Caso a letra seja encontrada, a função retornará o valor 1, ou seja, verdadeiro e a função desenhaforca() executará a condicional if, imprimindo a letra no lugar do underscore, caso contrário, o underscore será impresso novamente. O loop se repete sempre que o usuário informar uma nova letra.
A única coisa que reparei, é que seu algoritmo está num loop infinito no do...while, pois a negação das variáveis enforcou e acertou estão sempre retornando um valor verdadeiro.
Espero te-lo ajudado. Qualquer coisa posta aqui.
Abraços.