Вообще, ничего "неэлегантного" в Вашем способе я не вижу. Но можете воспользоваться replaceChild
<html>
<head>
<meta charset="utf-8">
<style>
</style>
</head>
<body>
<div id="outer">
<div id="inner">foo</div>
</div>
<script>
var div = document.createElement("div")
div.innerHTML = "bar"
div.id = "inner"
outer.replaceChild(div, inner)
</script>
</body>
</html>