No, they are standard C expressions and can be used in any line of C code
"en[bit]" simply accesses the array you declared at the top of your code. If "bit" was 10, for example, it would be the same as "en" which is A4, the pin number that digitalWrite needs. And "random(2) == 1 ? HIGH : LOW" gives a HIGH or LOW value it also needs.
HIGH and LOW are just values that are pre-defined in the Arduino language (not the C language, by the way). Arduino language is based on C but with some extra commands/functions like digitalWrite() and extra values like HIGH and LOW added on.
In fact HIGH is 1 and LOW is 0. So you could write
and it would work. Or at least it would work today. But in a future version of the Arduino language, they might decide to change the values for HIGH and LOW to be something else, like 100 and 200, and then the code above would stop working. So even though we know that HIGH=1 and LOW=0, it's best not to use "tricks" that rely on those values, but instead always use HIGH and LOW explicitly.