I want to get experience with low-level, bare-metal programming and am not sure if a project that uses an ROS counts as that.
ROS provides an even higher level framework which builds on top of your computer OS, such as Linux, or Windows.
You can learn a lot about low level concepts while using frameworks such as ROS. And you likely will find that you may want to select a specific part of a larger system to implement at the lowest level. A good learning project could be to reimplement an existing piece of functionality in bare metal instead of trying to recreate the entire system at the lowest level.
I second @Tully's statement that Bare Metal is defined as "without the OS in ROS".
Should you use an OS depends on the size of the processor. An 8 bit μC? Bare metal C. The ROM space is so little that you don't need the abstractions of C++ let alone that of an OS.
An ARM? Linux takes up only 3MB RAM to run.
An even more capable platform? An OS won't suffice, a plethora of third-party user-space utilities will also be needed as to utilize the platform's capacity.