pinMode() in class constructor? seem not to work

The setup() is called once, when the sketch starts. It's a good place to do setup tasks like setting pin modes or initializing libraries.

There are copious places where that is affirmed. Enough to justify my claim that it's a contract.

Bear in mind that tutorial is older than this thread and has not been subjected to peer review (until now). It needs to be updated.

There is. It has a high price.

That would be a breaking change. The overhead of checking for initialization would interfere with existing code that requires low(-ish) latency.

Serial.begin
Wire.begin
SPI.begin
Notecard.begin
LiquidCrystal_I2C .begin
WiFi.begin
The MIDI Device has a begin.
et cetera

The spirit of Arduino is to include a begin meant to be called in setup.