Hmm... I don't see what is wrong with option 1. It does introduce an incompatibility, but in a place where it is unlikely to break clients. The change was not extensive. The entire patch is 12k and there were 9 calls to the old write. And it provides the functionality in a way that fits the expected behavior.
HADOOP-1230, we're going deprecate JobConf. So I don't think having a subclass that adds readers/writers doesn't seem right. I'm also not very happy with the write(OutputStream) versus write(DataOutput), which can easily lead to confusion.
And using the binary format instead of the xml for job submission would make a lot of sense, be much much faster, and avoid all of the quoting problems of using xml to serialize the configuration.