Understanding of pointers requires a conceptual understanding of the memory architecture of your computer system: each address in numbered memory is a slot where you can put data, and some of the slots contain numbers of other slots. That's non-trivial. More importantly, it's not required for simple programs. Having that conceptual understanding and being able to solve problems with it shows in my opinion a desire to figure out what's really going on in a computer.
Further, to be fluent with pointers you need practice. Think of C puzzlers like: 'from the declaration below, describe the type of a in words'
int* (*)(int*[]) (a*[])(int *[]*, float[][]**);
What's required to answer that question quickly and with ease, or any other that deals with many levels of indirection? You need to have spent time to think deeply about what pointers are at the programming language level.
It's a similar story with recursion. To simply walk through a recursive function you've got to understand the call stack and how arguments are passed and returned. To master recursive functions you've got to be able to decompose a problem into smaller parts and solve each one piece by piece.
Fluency with recursion and pointers requires concepts that are the foundations for writing hard code. I believe the dedication required to master those concepts is a crucial ingredient in a good programmer. What's more, it's not too hard to show holes in someone's knowledge of concepts with a 10 minute programming test on a topic that requires them. Sound like great interview questions to me.