Não sei o que a função exibirTextoNaTela faz, nem como os argumentos são aplicados no HTML, mas, a meu ver, não há problema algum. Até porque a sua string não é uma template string.
Exemplo do uso de template string:
`Você descobriu o número secreto com ${tentativas} ${palavraTentativa}!`
Nesse caso, se essa string for enviada diretamente para o HTML, ele pode não assimilar a referenciação dos cifrões e chaves ao redor das variáveis interpoladas e tratar eles todos como texto, para evitar isso, normalmente se faz a concatenação tradicional, como você fez. Uma alternativa é fazer o processo de armazenar uma string de formato template string em uma variável para que então se lance essa variável no HTML. Assim, por exemplo:
var texto = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}!`;
exibirTextoNaTela('p', texto);
Ainda assim, entendo que podem, sim, surgir outras confusões envolvendo valores entre o HTML e JS, já que o JS é uma linguagem de tipagem fraca.
Em relação ao HTML, creio que o maior problema é o envio de textos (nesse caso, strings) do JavaScript para o documento HTML é a possibilidade de confusão entre texto e HTML.
Vou tentar dar um exemplo fácil. Supondo o seguinte ambiente em JavaScript:
function Funcao() {
var teste = document.getElementById('teste')
teste.innerHTML = "Eu gosto de jogar boliche :D";
}
Resultado (obviamente):
Eu gosto de jogar boliche :D
Quando a função é chamada, o conteúdo do elemento de id "teste" vai mudar, e é aparentemente somente texto.
Mas não se engane, o que mudou foi o HTML contido no elemento, o texto só foi consequência da mudança, já que o próprio HTML se baseia em texto por natureza.
Perceba a inserção de tags no texto:
function Funcao() {
var teste = document.getElementById('teste')
teste.innerHTML = "<b>Eu gosto de jogar boliche :D<b>";
}
Resultado:
Eu gosto de jogar boliche :D
Isso acontece porque o HTML tem caracteres, símbolos e expressões reservadas para a marcação de tags de elementos dentro da sua própria estrutura.
Para o sistema tratar a expressão da função como texto e preservar as tags, eu posso usar a propriedade innerText ao invés de innerHTML.
function Funcao() {
var teste = document.getElementById('teste')
teste.innerText = "<b>Eu gosto de jogar boliche :D<b>";
}
Já a concatenação, mais ligada ao JavaScript, pode se tornar problemática ao ter interpolação de string com valores numéricos. Vou dar um exemplo breve.
function funcao() {
var a = 1;
var b = 2;
return "1 + 2 = " + a + b;
}
Peça para o JavaScript lançar o valor dessa função no console e veja o resultado para entender o quão irritante pode ser trabalhar com JS.
Espero que eu tenha ajudado de alguma forma :)