The hardware IS capable of accurate values. The problem is with reading the information.
I think it is something related to this RCArduino: How To Read an RC Receiver With A Microcontroller - Part 1
I don't think that your problem is related to this. They don't say that pulseIn() is not accurate but that it wastes a lot of resources (what it does). In your case it may be sometimes interrupted by the Timer0 interrupt (counting milliseconds). You can try using noInterrupts() and interrupts() around your pulseIn() call.
How accurate is your hardware? 1%, 5%, 0.1%?