Hey there :) I wrote the above documentation a year or two ago. I think your question has two parts:
1. What is an attribute?
In the simplest terms possible, an attribute is something that differentiates your products at the SKU level.
An attribute for Drupal 8 is actually an entity, like a product or a piece of content. It's a specialized entity that has a specialized form for creation and management because the majority of product variations on Drupal Commerce 1.x needed something like what we built for 2.x.
One of the use cases we wanted to meet was the ability to add fields to attributes. So color or size are often used to describe an attribute. A color might need a field for a photorealistic representation of the color and a hexadecimal field that describes the color within the RGB spectrum.
2. In terms of entity architecture, why would I choose to make a differentiator an attribute? And the opposite situation?
When creating product variations, you can choose to create any number of fields. Sometimes those fields are best off being attribute references. Using attribute references lets the add-to-cart form understand the nature of your products and can help give you a configurable product form. This lets you pick the color and size combinations instead of picking from a long list of products with both colors and sizes pointed out.
In the end, no one is forcing you to use the attributes to document the differentiators. If you want to create an integer field per SKU that defines the length of the fabric you're selling, that doesn't have to be an attribute, but it could be a part of the pricing. (final price could be length x price)