If you don't rely on the hardware of the arduino then you need to hardware - the devices all need open drain drivers. The Master controls the clock, sends out data, the slave must acknowledge that data using the Master's clock, and then return data, also using the master's clock.
I suppose you could do a software version where you switch a pin from input to output a lot, and do it in sync with incoming SCL. Or use one input pin and one output and put an open drain buffer on the output pin so it could only pull low.
Try looking at Software Serial library - you'd need the same kind of code. I2C is generally 100K or 400K, could be tough to implement those kinds of speeds.