It is my belief that programming concepts one is able to understand and master truly distinguish a coder ability to think and design beautiful code. Learning those concepts is essential for becoming a better programmer. [I will refrain from defining "better programmer".]
Starting easily, do you remember when you tried to understand pointers for the first time? Or when you first heard about object oriented programming? Or all those fancy paradigms or data structures? It's not like you need to use them, but understanding them probably increases your awareness of how things can be done.
Also you can always survive without them, but having those tools readily available on a language allow you to focus on the implementation problem without needing to care on specific rules (e.g. Many people do OOP in pure C and many implement iterators in C++ though there is a clear lack of support for it).
I recently came with a new concept I was not aware of: a new way to control and understand the flow of computation. Well controlling flow can be done with several techniques - there is conditionals and loops for all flavours, there is exceptions and there is generators, there is callbacks, there is message oriented programming style, etc... - and there is
continuations!