Hola a todos
   Cita:  
					Iniciado por trovanet  cualquier validación sobre los objetos que alguna vez existieron da error
    Trovanet, he tenido el mismo problema en IE, no me deja acceder a los valores y propiedades de los elementos creados, en Mozilla sí.
He conseguido acceder  utilizando la sintesis de array del elemento form.  
 Código PHP:
     
<html>
<head>
<title>Crear un form</title>
 
</head>
<body>
<div id="selectColour"></div>
 
<a href="javascript:void(0)" onclick="create_form()">Crear form</a>
<script language=JavaScript type=text/javascript>
<!--
var colour_op=['Selecciona un color','red','green','yellow'];
// Guardamos aqúi los elementos de formulario creado
var obj_form = new Array()
function create_form(){
  // comprobar que form1 no este creado
  for(var ct1 = 0 ; ct1 < document.forms.length; ct1++){
 
    if(document.forms[ct1].name == "form1"){ return false}
  }
  // Donde vamos a colocar el formulario
  var div_select = document.getElementById("selectColour")
  // Creamos el objeto form
  var form_node = document.createElement("form")
   // añadimos el atributo
  form_node.setAttribute("name","form1")
  form_node.setAttribute("action","form.php")
  // añadimos el nodo creado como nodo hijo de div_select
  div_select.appendChild(form_node)
  
  var input_node = document.createElement("input")
   input_node.setAttribute("type","button")
   input_node.setAttribute("name","boton")
   input_node.setAttribute("value","botón")
   form_node.appendChild(input_node)
   
   var select_node = document.createElement("select")
 
  select_node.setAttribute("name","select1")
 
  for(var ct = 0; ct < colour_op.length; ct++){
 
      var option_node = document.createElement("option")
      select_node.appendChild(option_node)
      option_node.setAttribute("value",colour_op[ct])
      var text_node = document.createTextNode(colour_op[ct])
      option_node.appendChild(text_node)
 
 
  }
  form_node.appendChild(select_node)
  
  
  
  /* IE solo me ha permitido  acceder a las propiedades
   y valores del select creado  mediante  la sintesis de
   arrays, para poder trabajar más facilmente con los elementos de
   form  los guardo en un array.
  */
  for(var ct1 = 0 ; ct1 < document.forms.length; ct1++){
    if(document.forms[ct1].name == "form1"){
      obj_form[document.forms[ct1].name] = document.forms[ct1]
        for(var ct2 = 0; ct2 < document.forms[ct1].elements.length; ct2++){
        obj_form[document.forms[ct1].elements[ct2].name] = document.forms[ct1].elements[ct2]
        
        
      }
    }
  }
// utilizamos el array creado para trabajar con los elementos form
obj_form["select1"].onchange = show_selectedIndex
 
}
 
function show_selectedIndex(){
  colourButton = obj_form["select1"].options[obj_form["select1"].options.selectedIndex]
  if(colourButton.index != 0){
    obj_form["boton"].style.backgroundColor = colourButton.value
    
  }
}
 
 
//-->
</script>
 
 
</body>
</html> 
   
  En cuanto a la perdida de datos, corregirme si me equivoco, solo veo tres posibles soluciones, utilizar cookies, pero claro el usuario lo tiene que tener  habilitados. Si trabajas con frames, guardando los datos en unos de los frames, pero si el usario recarga la página los pierdes, o utilizar la propiedad search del objeto location he visto algún ejemplo en el foro. 
Espero que te sea util.
Muchas gracias a Caricatos por las direccciones, me están siendo de gran ayuda.  
Un saludo a todos