Using serial.print to debug a library

but I have no idea what the Arduino IDE is doing under the hood. so I made some assumptions as bad as that might seem.

It's not bad, as long as you understand that they are assumptions, and that you are will to make changes when the assumptions prove incorrect.

If I pass a pointer to my class of type HardwareSerial I still need to ensure the Serial class is created first.

That depends. If you (try to) pass the pointer to the constructor, then, yes, it is a problem. If, instead, you pass the pointer to the begin() method, and you call the begin() method in setup(), then you can be confident that the Serial instance will exist, and you can pass a pointer to it to your method.