boost::threadはC++03/C++0xの両方でmove対応してる

boost::threadは、Boost.Moveが入っていない1.46.1現在においても、C++03でmove対応してるので、boost::threadクラスのオブジェクトを関数で返すことができます(1.35.0にはすでに対応されてる)。

#include <iostream>
#include <boost/thread.hpp>

struct callable {
    void operator()()
    {
        std::cout << "run" << std::endl;
    }
};

boost::thread make_thread()
{
    callable x;
    return boost::thread(x); // 注意 : boost::refなどで参照を渡してはいけない
}

int main()
{
    boost::thread t = make_thread();

    t.join();
}
run