Why is MPLABX reporting the wrong amount of program memory used?
The debugging disassembly listing only shows compiled source code. Not shown  is low level initialization code which is required to get your program running, which the linker generates and combines with your code to produce the final executable. You can see the generated assembler code by selecting 'keep startup .as' in the project's linker options. 

Here's the debugging disassembly listing that XC8 V1.38 gave me for a minimal PIC10F322 program:-

9:             #include &lt;xc.h&gt;
10:            
11:            void main(void) {
12:                return;
13:            }
01FD  2800     GOTO 0x0


Clearly this is not everything because the code at 0x0 is not shown. Looking in the window 'PIC memory Views / Program Memory' we see this:-

000 GOTO 0x1FE   (execution starts here at reset/power on)
...
1FD GOTO 0x0
1FE CLRF STATUS
1FF GOTO 0x1FD 


So that's actually 4 program memory words used, though the compilation report said 3 and the disassembly listing only shows 1. I tried compiling it with XC8 V1.41 and the results were identical. 

Why do both versions show 1 word less than actual memory usage? I don't know, but it's not something I would worry about. If your code is so large that one word makes a difference then you should either refactor it or change to a chip with more memory!