It isn't necessary to learn a programming language to grasp abstract concepts. They simply help exercise the type of thinking required.
I compare it a lot to manufacturing, which is a complex process with many components that work together. I don't need to learn code to understand the fundamentals of building a car -- I just need good docs. It'd help to know how or why we use pistons, but as long as I put them in the right place, we're good.
Programming methodologies and patterns like OOP are extensions of logical thinking. How do I handle this data? And how do I effectively organize and architect my process to ensure minimal effort and best results? When you learn how to critically and abstractly at the same time, you start to fall into the same patterns everyone falls into.
It's how you said, we coded all our existence without C or Pascal -- the process of human innovation isn't unique, anyone who's had a great idea knows that great minds have and will think alike.
If I want to expand my programming knowledge or create bigger+better apps, I'll dig past my framework/language and see how it's inhibiting the process. That often requires me digging all the way to the V8 engine, learning about HTTP/2, or dropping a language entirely for another because of the holes you find (PHP anyone?).
TLDR: Learning how to make a hashtable is great and exercises the right kind of thinking, but I could glean similar concepts off more practical code (like OAuth APIs) if I cared to dig a little deeper.