One might think that after reading "so many articles", not being able to find a solution and saying "it's not as black and white as I thought", you would then say "oh, maybe I'm wrong, maybe it is a complex requirement after all".
I created a separate server next to Server A as a domain controller, but couldn't join either Server A or Server B to it for some reason (DNS issue I think)
You need to set their DNS server as the domain controller (which needs to be running DNS).
but then apparently Server B wouldn't have been able to join it anyway because it's not on the same local network.
As long as they can communicate (routes / firewall ports opened / VPNs between sites, etc), they can join the domain.
What do I need to do to set this up?
Microsoft answer: IIS Network Load Balancing, Failover Cluster mode.
First bit: getting the files from Server A to B. Anything from DFS to Robocopy in a scheduled task can do this, as long as you have sufficient communication between the servers. I'm thinking a VPN, but a private circuit connection would do. Over the internet would mean using HTTP, FTPS, or similar.
Second bit: how are you going to handle IIS configuration changes, if there are any?
Third bit: You've got one DNS entry for mywebsite.example.org returning the address of ServerA. How are you going to detect the disaster, and how are you going to change the traffic to go to ServerB?
Simplest way: with a VPN between the sites, and a firewall in front of the server, and a human changing the firewall rule to send traffic to the backup server when needed. (Don't go for public DNS changes, they will take too long to propagate).
Complex way: with an 'intelligent' load-balancing device in front of your webserver, checking which site is online and handling the failover.