Your first challenge will be getting physical access to the pins. Since you haven't specified your device, it's impossible to say more on that. No pins, all the software in the world isn't going to help you! Depending on your devices, you may need level shifters as well.
Past that, it's your choice of programming languages and libraries. Bit-banging is "always" an option with in-built hardware support potentially being available depending on the SoC in your device.
The registers within the display are the same regardless of how they are being accessed, yes.
The Arduino world is pretty broken with respect to portability, as well as having some "interesting" interpretations of the flow of a C++ program, and its Hardware Abstraction Layer (HAL). Be prepared to replace all kinds of proprietary calls around the TWI-based I2C implementation, timers, and data structures (Arduino is not a full C++ implementation and some of its classes may be incompatible with a different target). You'll also find Arduino-targeted code incredibly twisted as the ATmega series of devices don't have much SRAM (2k on an ATmega328) or program flash (32k on an ATmega328, 16k on an ATmega168).
A 128x64 bit array is 1k bytes, right there -- so the concept of a "frame buffer" of that size isn't really possible in a typical Arduino device.