Yes, you do, it's called abstraction.
For example, C compiler adds complexity when compared with assembler, but that lets you significantly simplify your code.
And without abstraction, modern software development would not be possible.
Of course too much abstraction can be a problem (which is why some people still program in assembly), but that does not mean JVM will always be the wrong solution.
I have a rudimentary understanding of the Linux and BSD kernels and how they can impact certain parts of my applications. But I have zero knowledge of Windows. But I don't need to, because the JVM engineers do, and things Just Work (TM).
I'm not smart enough to learn the intricacies of every platform, and thankfully I don't need to be.
I guess you have similar issues with POSIX and the abstractions offered by high level programming languages? I assume you write some CPU specific assembly and understand all the possible failure modes of that hardware?