If a virus rewrites itself for each infection how would it know if it has infected a file or not? If it keeps infecting the same file soon the whole file structure will be corrupt. For example how does Simile or Sality know if it has infected a file or not?
EDIT: they can't check something simple like "if they append 'kkk' to the end of the file" otherwise AV's would check that and the whole purpose of being polymorphic/metamorphic etc. would be defeated.