Hey man, I started my career 7 years ago by teaching myself PHP, jQuery, and CSS. First real job was as a "full stack web developer".
I always was in awe of the low level stuff though, so I took every opportunity to move closer and closer to the hardware over the years. I'm now a firmware developer!
Point being, where there's a will there's a way. If you can align some DIVs, you can malloc() some memory and pack bytes efficiently in a struct :) It all comes down to where your interest is.
It has allowed me to work on some very cool robotics, and IoT projects. I've been able to learn a ton in the process about how computers work. Things like having to learn about how our FreeRTOS scheduler works, have been a fun process and provide some insight (albeit not 1:1) on how larger scale OS's work.
I feel like it's also made me a better programmer on the higher level stuff too. Hard to explain why though. It's not the kind of thing that makes obvious sense. It's not like knowing how to efficiently pack bytes into a struct, somehow helps you be a better Scala or iOS developer. That's just not the case. Rather, there's something about knowing the low-level stuff that just eases my mind when it comes to writing higher level code. I've always been the type of person that gets distracted by needing to know the deeper layer of how something works.
Even in undergraduate classes like biology, I needed to know HOW that mitochondria ACTUALLY handles metabolism. That's what I mean when I say that the lower level stuff "eases my mind". I can call a higher level function, or use some higher level framework, with a clear understanding of how it could (and probably) is implemented. That makes me a better developer, because I can stop asking questions and start making things.
I think about this all the time. Thank god somebody has an interest in building programming languages, and other lower level nitty gritty work. Lord knows i wouldn't be able to do it