The DS1307 doesn't have a register for the weekday...
Sure it does. Register 0x03 is the DAY register and is taken from bits 0-2 and has a value from 1 through 7 (it is not zero-based). An example of writing to the RTC is:
Wire.beginTransmission(I2C_RTC); // Select RTC
Wire.send(0); // Start address
Wire.send(DecToBcd(second)); // Second
Wire.send(DecToBcd(minute)); // Minute
Wire.send(DecToBcd(hour)); // Hour
Wire.send(DecToBcd(weekday)); // Weekday
Wire.send(DecToBcd(day)); // Day
Wire.send(DecToBcd(month)); // Month (with century bit = 0)
Wire.send(DecToBcd(year)); // Year
Wire.endTransmission();
Note the Wire.send(0) statement near the start of the code. This call is done to reset the internal register pointer for the timekeeper register. The pointer autoincrements when a register is read/written. Passing in a zero value resets the pointer to the start of the timekeeper register. Failure to do that will cause the pointer to read/write to wherever the register pointer currently points. The pointer does "wrap around" after the last timekeeper register is read.