If the zsh situation is similar to bash (as it seems to be, from the link you posted), then then problem is that zsh provides completions through readline commands only.
This makes it hard to access them from Emacs. The bash-completion package mentioned in the blog post does that, but it's a tricky solution, and not super robust in my experience...
When it comes to personal configuration, I see no good reason not to use lambdas in this case. I also use them a lot when binding keys to simple commands which I don't want to name.
Also: option 1.