I think a lot of people who disparage Arduino a) are naturally gifted programmers, b) have long since forgotten what it’s like to be a beginner, and/or c) fall into the “hazing” mindset of “I had to suffer as a beginner, and thus so should you”.
The Arduino libraries have some limitations, but if — or rather when — you run into one, then you can learn how to get around it by doing totally normal MCU programming. One of the biggest misconceptions, I think, is that people think Arduino stops you from doing bare metal programming if you want. It won’t.
I do sorta understand one objection that Arduino opponents have: the possibility of getting used to using certain poor design patterns in coding, like polling in loops and using delays instead of using interrupts and non-blocking timers/counters. But then again, one can learn those anti-patterns with bare metal programming too. On the other hand, I have very little sympathy for the argument that using prebaked functions is bad. I mean, what do experienced programmers do all the time, early on in their projects? Write abstraction libraries.