If nothing exists it's because it's not "really" possible.
1st, it's useful to ask "When Pubsub generate double values?". Only when a message is delivered and the acknowledge is not received (or not emit in the expected time frame, 10s by default), or a no HTTP 200 is received in push mode.
2nd: What is Beam? Beam is a pipeline engine. You can plug your PubSub to it and
your pipeline will read message and deduplicate them. Be careful this deduplication is performed in a windows of 10 to 20 minutes by Beam.
3rd: What mean "ordered"? Look at the ID of your message. The value is a timestamp, in microsecond (that's why PubSub can ingest up to 1M of message per second). Ordered the message mean having a message for sequential ID, else put in a buffer and wait for fill in the gaps. Of course, gaps will never be filled in...
Go back to Beam. Beam has the capability to define windows of observation. By the way, you can define, for example, sliding windows of 5 minutes, each windows starting every minute. When a window is closed, a PCollection of messages is triggered and it processed into your pipeline. On this finite collection, you can ordered your message.
With the same principle, you can remove depublicates manually in this collection.
Last info, PubSub is a backbone of Google service. It evolves, slowly because it's critical. But, maybe your requirement will be release a day!