`LOW` being defined as `0` and `HIGH` being defined as `1` - is this a part of external specification?
The underlying reason for this question is to figure out whether code like

digitalWrite(some_pin, true);
digitalWrite(some_other_pin, !digitalRead(some_other_pin));

  
  is a good programming practice. (If LOW and HIGH are there to abstract the user's code form their actual values then code like that is definitely a bad programming practice.)


Strictly speaking, no, that is not good programming practice.

digitalRead() returns an int. digitalWrite() expects an int.  Using ! converts the int into a bool and then it's promoted back to an int again. 

In fact, the "next gen" Arduino core API changes HIGH and LOW from a simple int to an enum - and that struggles with casting through bool like that:

typedef enum {
  LOW     = 0,
  HIGH    = 1,
  CHANGE  = 2,
  FALLING = 3,
  RISING  = 4,
} PinStatus;


You can see the problems that causes here.