SSD1306 LCD and nonblocking libraries?

Easily done. The one trick it to make a copy of your volatile variable so it can't get updated/corrupted in you loop()

volatile unsigned long pulseWidth;
 void setup() {
...
}


void loop() {
  unsigned long pulseWidthCopy;

  cli(); // no interrupts
  pulseWidthCopy = pulseWidth;
  sei();
  ... // use pulseWidthCopy
}


void ISR() {
  static unsigned long lastTime;
  unsigned long currentTime = millis();
  pulseWidth = currentTime - lastTime;
  lastTime = currentTime;
}