Why can I only access public object instances within their own file and not outside?

put parser Parser; into the cpp and add extern parser Parser; into .h. this way you will have a single global object of type parser.

now you have two objects one in cpp and one in ino, because both files have static parser Parser; (#include is replaced by the content of the .h)