What is the difference between почему and зачем?
Certainly, зачем means "with what PURPOSE", while почему means "for what REASON". It's just as simple as that. Not to say that they are not interchangeable, though. When you use почему instead of зачем it may sound like a question from a parent to a child who has done something obviously wrong. Зачем insted of почему is much less common, for an obvious reason: we normally do not ask "with what purpose the Sun rises", we rather ask "for what reason the Sun rises" :)
Зачем definitely has a more emotional charge to it than the more neutral почему. (Which is probably true with the English "what for" as well)
Зачем ты меня бросила!? Why´d you dump me?! Зачем ты меня мучаешь? Why do you torment me? Зачем?! Whyyyy!!! (something you might imagine a soap opera character scream in agony) Мама, зачем ты меня родила!? Mom, why did you give birth to me!?
Using Зачем in normal speech would indicate a certain level of anger or desperation on your part.
*Also "зачем" belongs to a different register of formality.
I second Kundoo.
"Зачем" means "for what purpose" while "почему" is a plain vanilla "why" and is often a questions about reasons, not purpose.
- Почему ты остался дома? (Why did you stay home?)
- Я заболел (I was feeling ill).
- Зачем ты остался дома? (What was the purpose of your staying home?)
- Я жду водопроводчика (I am waiting for the plumber).
"I am ill" would not be considered within the range of possible answers to the second question.
Зачем is Why - when we mean "what for" :) There's another, literal equivalent to "what for" = "для чего". Зачем is just a shorter way to say для чего. When we ask "why?", meaning "what is the cause?" - we say "почему?". The cause in this case is not the purpose, aim, or objective. It is in no way put AFTER the event by any active agent. "The river drains into the sea" - "why it drains into the sea?" - normally, this very "why" can be only "почему", but never "зачем" which would mean "with what purpose". At the same time, почему can be used instead of зачем, mostly in a specific style, like "I wonder why you've removed this option from the program, [but don't you dare mention any trivial reason to explain that]"..