there are ways of dealing with this. delay-insensitive circuitry, QDI circuitry, micropipelines...
if you're interested as to the "state of the art", as I learned it, look no further than Principles of Asynchronous Circuit Design[1], a fantastic book. a PDF[2] is also available. another fascinating piece of work are Micropipelines[3] by none other than Sutherland.
the main benefit for asynchronous architectures is their ability to be expressed in software. the primitives used (as you'll read) function very much like traditional software constructs based around control and dataflow. this is very easy when your entire architecture is based around pipelines, which can choose to hold and "re-transmit" data.
asynchronous design isn't dead or disadvantageous. we just forgot about it for some reason.
[1]: http://www.springer.com/us/book/9780792376132 [2]: http://www.orbit.dtu.dk/files/2775719/imm855.pdf [3]: https://pdfs.semanticscholar.org/b840/ae4b928964eff41206f89f...