"почему" asks - how did things come to be this way?
"зачем" asks - what is the purpose of things being this way?
Note the difference in implication if I ask you "why" you were late for work. "почему" allows room for circumstances beyond your control, while "зачем" places the blame squarely on your shoulders.
English speakers may be completely unconscious of the overloaded nature of "why" - such is the value of learning other languages.