Hola:
El problema de crear controles dinámicamente no es ponerle un nombre, sino poderlo usar por el nombre con explorer, ya que estos controles no suele reconocerlos, pero si no piensas usar un script luego puedes hacer así:
element.name = 'userfile[]';
ó
element.setAttribute("name", "userfile[]");
Ya lo tenías en el script que nos has mostrado, pero si piensas usar ese control mediante un script, y quieres que funcione en explorer deberías tener un control ya definido y clonarlo...
<input type="file" onchange="x=this.cloneNode(true); x['value'] = ''; this.parentNode.appendChild(x); this.disabled = true;" name="userfile[];" />
Puedes ver un artículo aquí:
Controles creados dinámicamente
Saludos