I am currently trying out the examples from the Getting Started manual version 04a from Onsip.org. The reference design there shows that SER itself is nated.
That's correct. However, you are better off with SER on a public IP if you primarily serve external clients. If SER is NATed, you need to make sure that the public IP of SER is advertised (_port and _ip) and that the public IP is used in record_route_preset(). Of course, you also need to do static mapping on the NAT in front of SER to forward port 5060 to the inside address. I recently posted a more thorough explanation of this.
My question is how will a UA from the public internet or somewhere outside the SER's nat register with the SIP server? Will I put the SER's nat public ip as the sip proxy and do I have to set some kind of port forwarding on the SER's nat?
Yes.
Also, doesn't mediaproxy have to listen on a public ip?
Yes. This is described in the document and thoroughly documented in mediaproxy's README files.
g-)