it fails under threads
How so? I didn't see anything about threads in the documentation of Want
You probably already know that, but just in case I'll say it anyway: in your exemple, there is no object created, since the first parameter passed to funky is actually "FOO" (and so on to every following method). In the end, your autoload sub only returns a new object if you call it in a way that does not look object oriented (without the -> operator).
And last thing, instead of if not you can use unless