You could connect the IA or IB pin on the Expander Pi to one of the Raspberry Pi GPIO pins, via a voltage divider to drop the voltage down to 3.3V. It should then be possible to use an interrupt event on the GPIO pin to call a function when the pin changes state.
Our IO Pi tutorial https://www.abelectronics.co.uk/kb/article/1088/io-pi-tutorial-4---more-interrupts explains how this works in Python. I have never worked with GPIO interrupts in C++ but I believe that the WiringPi library includes that functionality.
The main difference between polling for interrupts and getting the value of a pin is that with interrupts you can catch state changes that occur between polling. For example if you are checking a pin every 100ms for a button press, if the button is pressed for 50ms between each check you may miss the event. By polling for interrupts instead of pin changes the interrupt will tell you that an event occured since you last checked so you could poll the interrupt every second and not miss a button press. The downside of using interrupts this way is if two button presses occured between polling checks the interrupt would only register one event.
Connecting the interrupt pins to the GPIO header and using an interrupt event on the Raspberry Pi side will get around this problem as your interrupt function would be called as soon as a button is pressed.