At this moment, a thread-local-only heap pointer must deal with multi-threading issues simply because destructors can run on another thread, even though the reference is thread-local. The biggest example right now is reference-counted structures such as std.stdio.File.
Just for the record: .net doesn't use reference counting for system resources like files, it works fine, such resources usually have well-defined ownership.