There's a lot more power in the stack than meets the eye. You can do a load of things with it, and have lots of things pending, and as Ed said, as long you know what you're doing, nothing gets messed up. I have a treatise on 6502 stacks at
http://wilsonminesco.com/stacks/ since forum posts showed the need for it. It addresses the range of subjects regarding stacks, starting with the definition and gradually reaching a stage a little bit past intermediate use, mostly ignoring the loftier subjects like multi-user, multithreading, and multitasking systems (which the 6502 is not very well suited for anyway).
Here's a list of chapters:
- definition and very basics
- subroutine return addresses and nesting
- interrupts
- virtual stacks and various ways to implement them
- stack addressing, both hardware and virtual
- passing parameters, and comparison of methods
- having a subroutine find inlined data, using the return address
- doing math and other operations by stacks in RPN
- RPN efficiency
- 65c02's added instructions that are useful in stacks
- using RTS, RTI, and JSR to synthesized other instructions
- where-am-I routines, for self-relocatable code
- a peek at the 65816's new instructions and capabilities that are relevant to stacks, and 65c02 code which partially synthesizes some of them
- local variables and environments
- recursion
- enough stack space?
- compiling or assembling program structures
- stack potpourri
- for further reading
plus appendices.
Start at the beginning and go as far as you're comfortable.
Happy programming!