void*
and
void(*)()
are just not guaranteed to be the same size. If the latter is larger then those "implementation defined aspects" are what kicks in. It's nothing to do with the int.
In some systems functions are smaller, since they're gate addresses in a jump table (who has more than 64k functions?), so that's no problem.
But in some systems functions are bigger, and PCDOS systems running in real mode this was very common, and in those cases you'd need to get the extra bits from someplace else (union trick), or just design things another way.