According to the C99 Rationale, the new line exists because of existing practice, which I think it’s the same as saying for historical reasons.
Rationale for International Standard — Programming Languages — C §7.23.3.1 The
asctimefunctionAlthough the name of this function suggests a conflict with the principle of removing ASCII
dependencies from the Standard, the name was retained due to prior art. For the same reason of existing practice, a proposal to remove the newline character from the string format was not adopted.
This talks about asctime, but since ctime is equivalent to asctime(localtime(timer)), so the same rule applies.