Because mathematically speaking, the modulo operation or division with remainder makes only sense on integers (or more generally on Euclidean Rings). This operation doesn't make sense on any (mathematical) field like the real numbers (or there computer approximations float and double) at all, because in such a structure a division can always be done without any remainder.
As a consequence, on an Euclidean Ring like the integers Z you get the derived quotient rings Z_n which consist (formally) of elements of Z with the same reminder module n, and these have applications in coding theory etc. There is nothing equivalent for the real numbers R.
So fmod
is an afterthought which takes one particular definition of division with reminder and implements it in an ad-hoc way on floats and doubles by truncating the result of the division. The only use for such a function is if you have accidentally stored integers in float or double variables, and if you want to save yourself the trouble of conversion to integer variables.
So from this point of view, it's completely logically that %
is an integral part of the language, while fmod
is just a library function.