Thanks for your help. My mind has been running in circles trying to make sense of this stuff today.

I had actually started reading some of the links in the .dts file comments, as well as the
Raspberry Pi docs, which covers a lot of the stuff mentioned elsewhere.
In particular, in devicetree-specification-v0.3.pdf, section 2.2.1 Node Names, on page 7 explains that nodes are named using node-name@unit-address, with the unit-address part match the first reg property of the node; here, the GPIO number. So, if you change the default to say 5, you need to change the @3 to @5 also.
Okay, thanks for confirming. Since posting I did come across a description of the '@' syntax as being for unit-address, but it's hard to know whether things that have the same number are correlated, or it's just coincidence but otherwise unrelated, or what.
This is part of the larger confusion I'm having - coming at this as a noob, it's so difficult to understand what are names/labels/IDs that have been devised and specified only within the .dts file, and what are references to other pre-existing things elsewhere.
It is equivalent to GPIO_ACTIVE_LOW. (0 corresponds to GPIO_ACTIVE_HIGH).
The button: buttonname { gpios: <&controller pin state>; } syntax is described in the Linux Kernel Documentation, GPIO Device Tree section. ...
If you had bothered to open the link in the comment, https://www.kernel.org/doc/Documentation/devicetree/bindings/input/gpio-keys.txt, you would already know this.
Actually, that document
doesn't explain the
<&gpio ...> specifier - it only says "OF device-tree gpio specification" (WTF does "OF" stand for?).

But I have now found yet another Linux kernel doc that does:
https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/gpio.txt. It seems the state 'cell' is actually a bit-field, of which active-high/low is only 1 flag. Seems there is others for push-pull, open-drain, etc. but I assume it's okay to leave them all zero (as they'll be when specifying a 0/1 decimal value for state).
Can I actually use the constant symbol
GPIO_ACTIVE_LOW instead, or does that depend on some include somewhere?
(Yes, I do get to be snarky while being helpful at the same time. The mix of positive and negative reinforcement is supposed to strengthen your will to find out more, spend a bit more effort, before asking others; and to give you a serotonin boost when do learn –– it is your body telling you win that way.)
Thank you for being so mindful of my physiological and mental wellbeing.

These are parameter declarations. They form a list of pairs
<&label>, "property.offset8"
<&label>, "property;offset16"
<&label>, "property:offset32"
<&label>, "property#offset64"
It describes the parameters that can be used to override specific values in the DT snippet. It does not describe what those values are, but where.
Okay, so ':4' (or ':0') is an offset... relative to what exactly? I assume that
<&button> refers to the same label declared on line 54, and similar for others (
<&shutdown_button>, line 38;
<&pin_state>, line 27). But the
gpios element of the
button block only has 3 elements, so how can the offset be 4?! And I still don't understand what an offset of zero into 'reg' is? What is 'reg'?