The way you're measuring algorithmic complexity does carry over to the lazy setting provided it's single-threaded because the order of execution is purely determined by the STG Code. In the concurrent lazy setting, it's a bit trickier since lightweight locking mechanisms occur when multiple threads evaluate the same thunk, making it non-deterministic. But the same problem is there for imperative concurrent programs.
The best resources I've found on GHC are:
*The Commentary is a bit out of date in some sections and very sparse, but that's the closest you can get on documented implementation details other than the Notes inside of the GHC source code itself.
Beyond that, the GHC code base is your friend ;) But seriously though, a book on Haskell performance is long overdue.