Problem with RTC and time library

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.