The PULSOUT routine is not a straightforward "shoot from the hip". You're specifying a duration, which for starters takes the routine time to figure what you want and set-up, then the PULSOUT routine is being called from your program, that's a subroutine jump to and a return from. Add-in all these little odds and ends and it takes a while BEFORE the PULSOUT is executed, and it takes a while to recover AFTER as well. That's why you're seeing that delay between adjacent pulses. You can always do it the long way... add in @ NOP's to time 1uS (at 4MHz) or 200nS (at 20MHz)... Here's Two 1 us Pulses, separated by 2uS the long-way (based on 20MHz PIC)...

High dmxdata
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
Low dmxdata
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
High dmxdata
@ NOP
@ NOP
@ NOP
@ NOP
@ NOP
Low dmxdata

Naturally you can incorporate them (pulses and delays) into subroutines if you remember to factor-in the subroutine calls and returns and any other fiddly bits you're doing into the calculation.