As far as I know, you can't. Tx isn't marked as threadsafe because it doesn't make sense to use it concurrently in most implementations.
A transaction is scoped to a connection, which typically corresponds to something like a network socket. Generally, that means the server is reading queries from the socket one at a time, and sending a response to each before processing the next query. In principle, it would be possible to pipeline multiple concurrent requests over the same socket (along the lines of HTTP/2) but the databases that I'm aware of (MySQL and PostgreSQL) don't support this, because it would complicate the protocol and the server implementation. So there's no point in supporting this behavior in the client library.
Similarly, SQLite doesn't use network sockets, but its idea of a "connection" is a data structure that isn't safe for concurrent access. You must either guarantee that your code doesn't access the same connection concurrently from multiple threads, or you can configure SQLite to run in "serialized" mode which enforces that behavior for you with mutexes.