Meiner Meinung nach ist der Stack ein extrem wichtiger Bestandteil einer Prozessorarchitektur und deshalb es Wert verstanden zu werden.
Im Bereich der x86 wird der Stack fast immer zur Parameterübergabe an Unterprogramme und Interrupthandler verwendet. Siehe folgenden Link:
http://de.wikipedia.org/wiki/Aufrufkonvention
Das kann man auch bei den AVRs machen... auch wenn sich die Register für Parameterübergabe anbieten.

Nun zur Frage, warum man die Register nicht im RAM speichert:
Der Stack ist selbsständig in der Lage die Werte an der richtigen Adresse zwischen zu speicher... einfaches Beispiel:
Du hast ein Unterprogramm, daß die Register in festgelegten Speicherstellen ablegt... was passiert, wenn das Unterprogramm sich selbst aufrufen möchte: Es überschreibt die alten Registerwerte mit den nun aktuellen Werten. Das ist ein Problem. Bei einem Mikrocontroller wird man allerdings selten rekursive Programmteile verwenden, da es sehr leicht zu einem Buffer-Overflow (hier:Stack) kommen kann. Allerdings kann es Probleme geben, wenn mehrere Interrupthandler den selben Zwischenspeicher verwenden würden. Interrupts können nämlich verschachtelt werden.

Gruß,
SIGINT