If all your machines have their own unique public address you can loadbalance with your own software by pointing people directly to different machines.
What?! Load balancers tend to be in place for availability and scalability reasons, not to save IP addresses. Sure, there are many use cases where you might not need to have public IPs on the backends a load balancer is sending traffic to, but to say that's the only "real" reason for a load balancer seems to be missing the point.
It's common to do internal services that way but you can't control how or who or the internet might try to connect to your service so the load balancer offers a layer of protection so servers can't be picked off individually.
They can also offer an abstraction/routing layer so you can do things like canaries and controlled rollouts which would be much more difficult just advertising IPs directly to the client.
You cannot use different ports from the client, it has to be 80 for HTTP, I meant; do you own loadbalancing from the client!
So f.ex. the browser would load parts of the site from another server via javascript or redirect to another dns with another IPv6 address.
To have a bottleneck between all your clients and all your servers is not good architecture.
Maybe not, but everyone else is doing it. If your clients are web browsers, it's hard to convince them to do useful things like notice servers have changed; much easier to focus their attention on a handful of load balancers on static IPs and figure it out from there.
NAT. You're thinking of NAT.
It can also be used for canary deployments where you roll out a feature to 1% of your user base.
There are several other use cases. I'm pretty sure 'saving IP addresses' is not a use case you'd use a load balancer for.