PIC: Global variable not modified inside interrupt handler
Have you identified the global variable as a volatile?

To ensure that the compiler does not optimize out any variable updates expected to be done within an interrupt handler, the variable declaration must be thus:

volatile unsigned int theVariableThatTheIsrChanges;



Edit to original question invalidates above solution. Other possible issues:


Global variable is not in scope within ISR: This should throw an error, but some compilers and compile flags have automatic declaration of undeclared variables on first access, making such bugs notoriously difficult to track down.
Disable all compiler optimizations for debugging: It is possible that for some reason the compiler does not see the actual variable update, and thus optimizes that code out of existence. 
The LED does turn on, but for too short a duration: button_debounce() code is not in listing, not sure how it behaves. Try changing the code to use booleans, and set the variable on a positive return from button_debounce, and never resetting it (OR the return value) for debugging - the LED should now turn on but never turn off.


More possibilities:


initialize_stuff() has some error causing ISR to never be set up
ISR is not being called at all
Interrupt has not been enabled
The while() loop is blocking interrupts (why?)
Interrupt flag is not being reset, hence next interrupt never gets generated




Final update: The last point above was the solution.