You've got to set an IP address somehow. Typing a MAC address into your DHCP server isn't a cool way to do it, and you need an address that you know from the outside, not just an address the device can use to talk to servers it already knows about.
No you don't. If you run everything virtual private, and use IPv6, you really don't give a damn that you are giving third parties with physical access access to a routable IP address. DHCP is only for configuring things you can already configure automatically. For services (like DNS, proxy gateway, etc.), you can use service discovery.
The address from the outside is done using DNS update, which is done via cryptographic key. If you have a pre-shared key, then you can set your machines name in some remote network to point to your current IP Address, and use Source Address verification to verify that is in fact who it says it is. All DNS configuration can cascade upstream that way.
Occasionally, you need an explicit configuration for the cryptographic key (probably an X.509 cert) or the actual domain name vs. the delegates, which can, if needed, give the name of the IPv6 address on the delegation, to prevent collisions, or just make the delegate name part of the cert that gets verified by the DNS server before it enters the record.
This also goes for mail forwarding servers (use DNS to look up the mail server for the domain in which you've registered your delegate using your pre-shared cert.
It's actually pretty trivial to implement, if you don't care about guests using your bandwidth.