Rocombo,
 одну и туже строку надо переписывать!!! а не на каждый ключ, брать новую
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<style>
</style>
<ul id="context"></ul>
<script>
    var personOne={
      fullname:'John',
      gender:'Male',
      email:'John@gmail.com'
    }
    var personTwo={
      fullname:'Boris',
      gender:'Male',
      email:'Boris@gmail.com'
    }
    var valueHash=[personOne,personTwo];
    var listItemTpl="<li>fullname<\/li><li>gender<\/li><li>email<\/li><li><button class='closeInfo'>Find more</button><\/li>";
    function renderTemplate (tpl, valueHash) {
    var string='';
    valueHash.forEach(function(item) {
        var str = tpl;
        for (var key in item) {
         str=str.replace(key, item[key]);
        }
       string += str
    });
    return string;
    }
    var html = renderTemplate(listItemTpl,valueHash);
    document.getElementById('context').innerHTML= html;
</script>
</body>
</html>