File transfers are usually peer-to-peer. I think that file transfer proxy is only to help clients to find each other, but then it also should happen peer-to-peer. Depends on a client maybe. It works with Conversations client on igniterealtime.org server, which is using latest Openfire.

I don't know what this error means. Maybe the other client is trying to use a transfer protocol that Spark (and Smack) doesn't support. I've read somewhere that Spark is using Stream Initiation File Transfer (SI FT), but some clients (like Conversations) do not support that. You can try Spark 2.8.3. It has newer Smack library, though in general it seems that file transfer got worse in that version of Spark.

I don't understand that question. Smack is the API library. Spark is based on Smack. Conversations is not. Some other clients are based on Smack (like latest Xabber). It shouldn't be mandatory to use clients based on the same library, although it could be that results would be better. But that's just speculation. File transfer is generally the most complex and broken feature as files are not going through the server like messages and two clients have to find a way to talk to each other directly. This is problematic in the world of firewalls, NAT, proxies, different internet providers, etc. It might be, that you won't find a solution for this problem.