¿Por qué no querés usar funciones auxiliares?
De todas formas, pensémoslo como un problema de recursión.
Tenemos resuelto el caso base, que sucede cuando al árbol es vacío y el valor a retornar es NULL.
Luego, podemos asumir que sabemos resolver el problema para instancias más cercanas al caso base, en este caso, implica asumir que si realizamos las invocaciones:
Lista lizq = enOrden(arb->izq);
Lista lder = enOrden(arb->der);
Entonces en lizq vamos a tener la lista resultante de recorrer el subárbol izquierdo de arb en orden,
y en lder vamos a tener la lista resultante de recorrer el subárbol derecho de arb en orden.
Una vez que tenemos estas dos listas, y que además guardamos el elemento de la raíz del arbol en un nodo nuevo:
Lista* nuevo = new nodoLista;
nuevo->elem = arb->elem;
¿Cómo tenemos que integrar estas 3 partes para formar la lista que debemos retornar?