1. request_refresh_rate() needs some work. I've never seen it work properly on Windows.
2. Even if you successfully request the refresh rate you want, it will never be exactly the same every time. No matter what, your Allegro timer will slowly drift away from the monitor's refresh. The only ways you can time perfectly to the monitor is to use vsync(), page flipping (which also uses vsync()) or learn triple buffering.
3. Timing only to the monitor is a very bad idea since not every user will have the same refresh rate and since request_refresh_rate() isn't reliable. If you want your game to be timed accurately you will need to resort to a timer. Thus, unless you're doing real-time logic, monitor synchronization plus accurate game timing are impossible to combine without frame loss.
--- Kris Asick (Gemini)