Primero que nada una disculpa por no explicar los cambios que hice, pensé que así como pusiste el código sin mas explicación también podrías entender los cambios sin mucha explicación.
   Cita:  
					Iniciado por ambigus  
  1. ¿Porqué quitar le "nodo *apun" a void reco_iter(nodo*apun) y quitar definitivamente "void borrar_lista(nodo *inicial);"?
     
Código C++:
Ver original- void reco_iter(nodo *apun); // Cambio 
-     void borrar_lista(nodo *inicial) ; 
De esto    
Código C++:
Ver original- void lista::reco_iter(nodo *apun) // Cambio 
- { 
-     while(apun != NULL) 
-     { 
-         imprime_nodo(apun); // Imprime valor nodo 
-         apun = apun->sig; 
-     } 
Pasas a esto:    
Código C++:
Ver original- void lista::reco_iter() // Cambio 
-     { 
-         nodo *apun = inicial; 
-         while(apun != NULL) 
-         { 
-             imprime_nodo(apun); // Imprime valor nodo 
-             apun = apun->sig; 
-         } 
-     } 
   Veo que no comprendes aun bien el concepto de encapsulamiento. Dime, ¿Por que debo de pasarle y yo por mi parte mantener siempre el primer nodo de la lista, que no eso debería de ser transparente?  
 Cita:  
					Iniciado por ambigus  
  2. ¿Porqué metes dentro el "nodo *apun = inicial;"?
3. ¿Porqué este cambio? 
De esto:   
Código C++:
Ver original- nodo *apun; // " * " es para crear nodo 
-     apun=inicial; 
A esto:   
Código C++:
Ver original- nodo *apun = inicial; // " * " es para crear nodo 
   Bueno la pregunta 2 y 3 es la misma pregunta. Ahora realmente me pregunto si tu escribiste este código. Es básico, una de las primeras cosas que vez cuando aprendes C o C++ que int x = 1; es igual que si tuvieras. int x; x = 1; simplemente es como una abreviación.  
 Cita:  
					Iniciado por ambigus  
  4. ¿Porqué de "void main()" pasas a "int main()"?
    Como te dije antes, es porque no estas acostumbrado a los estándares, pero un estándar de C++ es que regresen un entero. 0 en caso que todo salio bien y cualquier otro valor si algo salio mal. De hecho no te debería de compilar con void main() con cualquier compilador de C++ minimamente decente.  
 Cita:  
					Iniciado por ambigus  
  5. ¿Porqué de esto
    
Código C++:
Ver original- apun = objlista.inicial; 
-     objlista.reco_iter(apun); 
-     objlista.borrar_lista(objlista.inicial) 
Pasas a esto:    
Código C++:
Ver original- objlista.reco_iter(); 
-         objlista.~lista(); 
-         return 0; 
   No tenias implementado borrar_lista solo tenias implementado el destructor. Así que mejor cambie la llamada de borrar_lista al destructor. Y el de reco_iter siempre obtenias  objlista.inicial y luego se lo pasabas de parámetro al método entonces dije porque mejor no simplemente lo tomas internamente en la clase y ya. 
Otra cosa trata de separar con una linea en blanco tus métodos porque todos juntos no se venia donde terminaba uno y donde empezaba otro.