You don't need to run the master and the slave on the same supply. As long as you keep the digital voltages on the HMC5843 below 2.2V it will be OK. However, the pic16F877a has an input high level of 0.8 Vdd, so you need the supply has to less than about 2.5 V.
On the I2C bus, the clock and data lines are pulled up by resistors, and there are some 50 kΩ ones inside the HMC5843 which you can if you are using the I2C at low speeds. You should connect the pull-ups to the DVDD.
You should be able to connect several I2C devices to the same master, as long as the addresses are different.