You don't /need/ to understand the internal details of the cpu for to program it - you don't even /need/ to understand the ISA or assembly when programming in C. But I believe you can only get the best out of a processor if you are familiar with it's internals. When I am learning a new cpu, I like to do some assembly programming just to get the feel of it, even though my "real" programming is almost always C.
When I was learning assembly programming as a teenager, my main platform was a ZX Spectrum with an unreliable taperecorder as storage. I wrote assembly code with paper and pencil, then hand-assembled to hex. To test it, I would first have to write a loader program in Basic, then type in hex. If it failed and hung the system, I had to start from scratch - and the main debugging aid was the sound of the buzzing in the voltage regulator. I think the experience taught me a lot about attention to detail, and step-by-step testing.
Only in theory, at university.
But sometimes I think PIC assembly makes more sense if you think of it as microcode, with the W register being merely an internal holding register.