My opinion is that the Arduino "word" type was originally intending to give you a 16 bit field which is an "int" on the AVR.
The reason being is that historically, "word" or "WORD" was often used to represent a 16 bit field.
(This was being done many years ago since it was the only want to have portable code prior to the ANSI standard types - Today is it completely unnecessary)
However, when the ARM support was added to Arduino IDE, the Arduino guys failed to typedef "word" as an "unsigned short" on the ARM to also give you a 16 bit value, so in my view the Arduino "word" type is broken on ARM and because of that should be avoided completely even on AVR.
None of this would be an issue if Arduino had defined "word" to be "uint16_t" instead of "unsigned int".
I believe that the guys that added the ARM support to arduino didn't know what they were doing because having a typedef of "word" that simply defines it as "unsigned int" which behaves differently across architectures is pretty useless.
i.e. you might as well just be using "unsigned int".