Вместо вызова Close в выходном потоке установите переменную равной nil и позвольте сборщику мусора справиться с этим. wxOutputStream на самом деле является указателем на wxFTPOutputStream, который наследуется от wxSocketOuputStream. Метод Close ничего не делает - он всегда возвращает true - и поток должен быть уничтожен (то есть вызван деструктор), чтобы закрыть сокет.
Попробуйте это:
local ftp = wx.wxFTP()
local ftpAddress = wx.wxIPV4address()
ftpAddress:Service( "ftp" )
ftpAddress:Hostname( "ftp.example.com" )
ftp:Connect( ftpAddress )
local out1 = ftp:GetOutputStream( "foo" )
out1 = nil
collectgarbage("collect") -- force full garbage collection
local out2 = ftp:GetOutputStream( "bar" )
out2 = nil
collectgarbage("collect")