I thought Scheme's semantics were allowed to be lazy to some extent, but I'm unaware of the finer points of it. Would a conforming implementation allow being lazy in this instance?
I definitely agree that this seems like a strange place to pull out continuations. I get the impression that the author started from wanting an example of continuations, rather than an implementation of yield. As other people have pointed out, continuations and closures are equivalently powerful given CPS, but continuations seem simply gratuitous for this example.
Just to make my point, here's my Common Lisp implementation:
(defun generator (list last-val)
(lambda ()
(if list (pop list) last-val)))
Scheme would have to roll its own Pop macro, but I don't see how that would require a raw continuation primitive.