I think `__COUNTER__` can be useful; but it's just like `#pragma once` — every vendor already supports it, a fair bit of code depends on it, so what's the point of all the bickering to add it to the Standard? It's easier to just maintain the status quo, which is that it's non-standard but it works.
For comparison, C++ once tried to standardize the equally widespread vendor practice of
#define CALL(...) call(1, 2, 3 ,##__VA_ARGS__)
to mean "eliminate the trailing comma if __VA_ARGS__ is empty," and after they got through with it we ended up with a whole new thing called __VA_OPT__, and the original code remains a non-standard extension.
–Arthur