What is the purpose behind multiple addressing modes in a processor
Address modes at the ISA level (a different topic from what Jack Creasey is talking about) are designed to make the processor more efficient for typical applications. If a common operation can be done with fewer instructions, it saves both memory and time.

A programmer typically uses data in a number of different ways.


Sometimes, the same value is always used for a given operation, which leads to the "immediate" mode of addressing, in which the data is actually part of the instruction.
Sometimes a programmer wants to use a global variable, which leads to the "direct" mode of addressing, in which the data memory address is part of the instruction.
Sometimes a programmer wants to use a variable that is local to a given function, and wants to be able to use that function recursively. This leads to an addressing mode in which an offset relative to the stack pointer is part of the instruction.
Sometimes a programmer wants to keep data in an array, in which case, both the base address of the array and an index into the array need to be specified. This leads to an indexed mode of addressing, in which both values are typically pulled from registers (the register names are part of the instruction).
Speaking of arrays, stacks (LIFO) and buffers (FIFO) are very common in many types of programming, which leads to autoincrement and autodecrement addressing modes.
More complicated data structures (lists, trees, etc.) require pointers and references, which lead to various levels of indirection (i.e., an address of an address) in addressing modes, which can be combined in various ways with all of the previous modes.


And so forth and so on.

As you say, different processors have different sets of addressing modes, which makes some of them not suitable (or at least less optimal) for certain types of problems.


  
  When exactly was idea of different addressing modes conceived?
  


Pretty much from day 1. Computer architects realized early on that these modes of data access would be important.


  
  Why do we need so many different addressing modes?
  


See the list above.


  
  Why are the addressing modes transparents when programming in high level languages?
  


These concepts are common to both assembly-language and high-level language programming, so it is relatively straightforward for a compiler to pick the correct mode.