after a certain amount of time rather than at a certain block number.
Have you considered the following post which might outline an elegant solution to the problems you raise?
https://bitcointalksearch.org/topic/get-rid-of-difficulty-and-maintain-a-constant-rate-425
Agreed, that also solves the problem. But is a much more extensive change to the system that changes it in many other ways as well. It is more difficult to analyze. My proposal is just a small tweak to the existing algorithm that preserves most of its current characteristics. Adjustments would still be synced on a block boundary, so no stronger time synchronization would be needed. No additional communications between clients would be needed. The frequency of the adjustments would still be low (but more stable) so no additional sensitivity to latencies.