I think this issue should be reopened. Let me try to explain why:
I am trying to pass a reference to the referring page, to a bookmarkable page, using a BookmarkablePageLink. The reference is later used to direct the user back to the referring page (if it still exists).
Because of the non-public constructor in PageReference, there is no way to reconstruct the object based on the PageParameters passed to the bookmarkable page.
Of course I have to deal with the possibility that the referring page no longer exist, but I guess in that case, PageReference#getPage will return null.
As a workaround, I store the pageId as a reference to the referring page in the bookmarkable page, and copied the code in PageReference#getPage. It works, but it is definitely not an ideal solution.
I you are worried about creating references to non-existing pages, you could add some kind of validating factory method - that verifies the page existence (using the same code as in PageReference#getPage).