позиция ясна, но я не вижу противоречий. Может мы по разному понимаем BYTE и WORD? давая по-порядку.
все типы определены в одном файле подключения globalt.h
при использовании нового компилятора эти типы переопределяются для обеспечения максимальной эффективности
#ifdef _MPC_              /* Microchip PIC 8bit*/
 typedef unsigned char     BYTE;
#else
 typedef unsigned short    BYTE; //для 16битника
#endif
что такое тип BYTE у меня.
это беззнаковый тип. 0-0xff используется для счетчиков, переменных размера и т.д. Не используется в алгебраических выражениях.
WORD это беззнаковый тип 0-0xFFFF 
стандартный тип  должен быть не менее 2-х байт
typedef unsigned int      WORD; 
для миллионов есть тип DWORD
typedef unsigned long     DWORD;
указатель нельзя объявлять как
WORD *pwVar;
а нужно
ptr pVar;
PWORD pwVar;
typedef char *        ptr;          /* Указатель                      */
typedef WORD NEAR     *PWORD;
typedef WORD FAR      *LPWORD;
Короче говоря, моё мнение -- нужно использовать максимально стандартные типы и <stdint.h> если их не хватает.
Я считаю наоборот, что стандартные типы не нужно использовать. А нужно использовать переопределенные типы. При этом переопределив тип в одном месте можно повысить эффективность выполнения программы на конкретной платформе.