It is executing on a separate thread, but dereferencing via @ makes the thread that spawned the future block. So you have two threads, but the main thread is blocked because of @.
What you most likely want to do instead is:
(future (Thread/sleep 1000 async-push "chunk three"))
What may in fact be preferable to that as well is to use a thread pool via the executors framework. You can enqueue futures onto a fixed or cached thread pool for a little more efficiency.
BTW, if you just want a sleep interval, it's best to use an instance of a Timer instead of sleeping a thread, as that will be much more efficient. Noir-async comes with some convenient set-timeout and set-interval functions in its util class. So you could write (set-timeout 1000 #(async-push "chunk three")). Assuming you've imported noir-async.utils
Hope that helps! Let me know if you have any other questions.