MAC addresses are link-local device identifiers, used by the switches and routers and WiFi access points that talk directly to the devices in question. Switches and routers maintain a table of which MAC to send a packet to based on the IP address - I.e. which actual port to send the data frames down.
There is DHCP for IPv6, but the IPv6 stack is supposed to be able to detect which subnet it’s router is in and then just pick addresses on its own (it does look for conflicts before committing to an address). This is called SLACC (stateless address auto configuration).
NAT is unnecessary because there are so many addresses, as others have mentioned; but I did want to point out that NAT is not used for security. Just because it obscures your devices does not make them any safer. All IPS routers have a firewall to one degree or another (could be as simple as “no incoming connections”; which is bad and lazy but it happens). Firewalling - examining incoming traffic against a set of rules for allowing or denying - is the correct way to secure any network, IPv4 or IPv6.
You cannot specify ports in a DNS A or AAAA record. www.example.com cannot resolve to 1.2.3.4:443 and app.domain.com cannot resolve to 1.2.3.4:5555
If the application (be it a game or whatnot) supports it, SRV records can identify a port for a hostname. So, you could have minecraft1.domain.com and an SRV record to specify port 25565, and minecraft2.domain.com SRV 25566.
This means you can have multiple Minecraft servers with the same IP address, but you won’t need to give people the port numbers to remember; the hostname allows the game to look up the port via the SRV record.
This is great for selfhosters because we generally only get one IP (until they rollout IPv6; probably half the reason they don’t)