Columnar data stores tend to be used in applications where performance is the primary concern. Abstractions tend to be leaky, but especially so when it comes to performance.
This is maybe comparable to the way high-performance applications are still usually written in C instead of higher-level languages. You'd think that at this point we could write compilers smart enough to generate more performant code than something written by a human hand, but in practice that often doesn't turn out to be true. Not yet anyway. And even when this is possible, due to their inevitably complexity, those abstractions tend to misbehave in unexpected ways, with unpredictable performance hiccups.