The stack allows subroutines to be used. It can store return address for "return from subroutine" instruction (RTN) and also arguments for the function.
It is not possible to store return address in the program instruction list itself, because the subroutine might be called from many different places in the program, and the return address will differ.
The same with arguments, the argument passed to the subroutine differs.
Without stack, the subroutine as a whole would have to be printed out multiple times in the program instruction sequence (i.e., there would not be subroutines. )
So is the reason a stack architecture was developed/designed originally (and still to this day) to reduce the size of the program mainly?
There might be more reasons than arguments and return addresses for stack, but those are as much as I understand so far.