Hi Jack.
Maybe you had no replies because this is not the way HTTP was designed to work. HTTP works with requests!
As you said, Arduino will act as a server, which means it is waiting for any requests from 1 or more clients.
The workaround is to provide some polling javascript in the first page you provide to the client. Then It will be the client to continuously poll the server for updates (in this case, it is the push of a button).
You can implement it in AJAX and have the page reconfiguring itself without refreshing if you can.
OR
You can add something like this inside the head tag:
<meta http-equiv="refresh" content="5">
This will refresh the page every 5 seconds. On the Arduino side, all you have to do is to store the pushbutton state (pressed/not pressed - boolean?). Then, each time you receive a request from the client, you just verify the button state and serve a different page if the button was previously pressed.
Of course, this won't be a real-time system, but if you need it, you sould consider something like UDP for the communication.
Best regards,
Ricardo Dias