Programmers exist in a world where things such as leap seconds matter. Normally if you have a timestamp that is just before a leap second, then add exactly a day's worth of seconds, you'd slide back a little in time. This might matter in another context, such as defining the limits of neighboring ranges properly. Also, who's to say the underlying precision is a second?
The intent of the library in question is to behave the way most people would. With imperfect buckets and idealized answers; yet also precision where someone makes the attempt to be specific.
None of the examples in the article use a more vague syntax, such as "0 days before the end of the month". They start with what a human might, a rounded but full date; then apply an interval. So a more clear contrived example might be.
Jan 31 .plus(1 months) => Feb 28
Jan 31 .plus(2 months) => Mar 31
Jan 31 .plus(3 months) => Apr 30
Jan 31 .plus(4 months) => May 31
Jan 1 .plus(1 months) => Feb 1
Jan 1 .plus(2 months) => Mar 1
Jan 1 .plus(3 months) => Apr 1
Jan 1 .plus(4 months) => May 1
Note how in the second half there are still variably sized months, but the result is what a human would want.