There was a question on stackoverflow on how to write an iOS app purely in C. Of course, anything is possible given time and money. The question is, why would I want to do this. Most of the time, you wouldn't, yet I don't think that is the lesson to learn here. It is not about mental gymnastics, it is understanding the system you live in.
When I was in school, most people in my math courses would always say "When am I ever going to use this?". I would say beyond most basic skills, I don't use much of the math that I learned (although it does come in handy helping the kids with their homework). When I do run into a problem that requires me to need something beyond the basics, I am glad that I at least know where to start looking. This is the same with programming. I don't write assembly, but sometimes in debugging, I don't have access to source and need to look at the output to see what is going on. I am glad that I took a course on debugging and got details on some of the x86 assembly calls.
Most everything in programming is just another level of abstraction to make our lives easier (maybe). It is good to know how things work underneath the covers of your abstraction, although you don't have to be an expert. Go out and dig under the covers of your favorite platform and learn something new today. Maybe you can find a way to use it :).