I think you have to change the library.
Here is a project where I changed the library files: https://wokwi.com/arduino/projects/307841659182252608.
I took the "LiquidCrystal_I2C.cpp" and "LiquidCrystal_I2C.cpp" and copied them into my project. I changed the names of the files.
Then I added a pointer to a I2C object to the class of the display.
I changed the code of the display, the pointer to the I2C object is copied in the constructor function and the code uses that pointer for the I2C functions.
class LiquidCrystal_I2C : public Print {
public:
LiquidCrystal_I2C(SoftwareWire * softwire, uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);
private:
SoftwareWire * _swire;
};
_swire->beginTransmission(_Addr);
_swire->write((int)(_data) | _backlightval);
_swire->endTransmission();
I could not find a LCD library that made it easier.
Perhaps there is a LCD library that already uses its own software implementation for the I2C. If you find such a library, please give a link to it, so I can have a look at it.