Turns out creating a huge environment variable prevents creation of any child processes. That's why $FZF_PICK ends up empty.
Doing this in a shell:
export a="$(perl -e 'print "a"x(128*1024)')"
achieves the same (can't execute any command after that due to Argument list too long), while this works:
export a="$(perl -e 'print "a"x(128*1024 - 3)')"
Didn't realize that argument length limitation applies to environment variables as well.
The only thing that comes to mind right now is storing data in some temporary file to avoid creation of a large environment variable. Haven't tried it yet.