To make your program responsive you will need to get rid of the calls to delay(). Look at the "BlinkWithoutDelay" example to see how that can be done.
Your loop() should do nothing but: check the buttons and decide which pattern to run. call the function for that pattern.
Each pattern function should keep track of where in the pattern you are and how long until the pattern should change. If the 'how long' has not arrived yet, just return. If it is time to change, change the lights and then return.
The board in which the receiver chip resides will probably have transistor drivers (simple or H-bridge) for the various motors and lights. You should be able to replace the chip with an Arduino and connect to the existing drivers.
An H-bridge will have four transistors with the motor connected between pairs of transistors. Each pair of transistors is probably connected to a pin of the receiver chip. Try tracing the circuits to see which receiver chip pins control each pair of transistors.
To use the multiplexer you have to set up the address pins using digitalWrite() and then read the analog input pin that is connected to the multiplexer with analogRead(). The Arduino library for the mux shield would do that for you but you can't run that library and Firmata at the same time. You will have to set the address pins through Firmata.
Many people measure the frequency and/or duration of fuel injector pulses to determine fuel usage. If you can get an oscilloscope connected to your injectors you can tell if the ECU uses varying frequency of fixed-length pulses or fixed-frequency pulses of varying duration to control fuel flow.