У вас какие-то новіе функции вижу, вместо innerHTML используете метод textContent, вместо getElementById используете querySelectorAll? Они работают одинаково?
Попробовал так, но вроде слышал это плохой тон, нужно выполнять поиск элементов в списке.
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<input type="button" onClick="freplace()" value="Замена элемента">
<script>
function freplace(){
let change = document.createElement('li');
change.innerHTML = 'Заменено';
list1.children[2].replaceWith(change);
}
</script>
</body>
</html>