Short Answer: No there is not any technical limitations from the protocol or topology updater preventing you from doing this.
Considerations: Starting external and working in, we need to consider the DNS vs Public IP side of this. In my opinion a Public IP should be avoided because if it changes, you have to resubmit your stake-pool registration.
Excluding a public IP, we are left with DNS. There are 2 main ways you can setup the DNS: just an A Record or an SRV Record. It is worth noting that the SRV record doesn't know if a network is down/a-server-is-down, so it will not replace your load balancer for those type of services.
Either decision, the next step is your load balancer(s). I haven't actually set one of up for this use case but my initial thought would be this is where you run the topology-updater script. As well as, you know, balance the load. For the topology updater, make your valency equal to the number of relays you have (if using DNS, otherwise this won't work). Doing this allows more than one connection per peer. This is important because you are using a load balancer which could potentially create a situation where there are no incoming peers to a relay. You will still want to run a topology pull script to set your relay nodes' topology.
I hope this helps!