The problem is that Box<dyn Thing> does not automatically implement Thing. (dyn Thing does, but Box<dyn Thing> is a different type.) You could handle this by writing an explicit implementation: impl Thing for Box<dyn Thing> { ... }, or even impl<T: Thing> Thing for Box<T> { ... }. Here's an example of such an impl for std::error::Error in the standard library.
(That solution only works if Thing is a trait defined in your own crate; if it's somebody else's trait, then you can't write those impls yourself, and you will have to ask the other author to fix their interface or use a less elegant workaround.)