This cannot be easily fixed. Upstream USB communication is polling-based: the host periodically sends a request to each device on the bus and checks their reply, and even an empty reply takes a time slot. The shortest polling interval is 1 millisecond.
See if you can change the endpoint polling interval in the FTDI driver configuration (AFAIK 32 milliseconds ...
There's nothing wrong with your approach for individual text files. For a binary file (or a large number of files/directories which you'd pack together with tar/gzip), you can use base64 to encode them as text:
Receiver (Pi over picocom):
cat | base64 -di > file
Sender (another terminal on the PC):
cat file | base64 > /proc/`pidof picocom`/fd/0
I suspect there are several issues here.
If you have both a terminal program and the python script talking to the port at the same time, only one of them is going to read the data. Both can write without difficulty.
When reading from serial ports, it is often necessary to do some special things: setting raw mode, setting VTIME and VMIN parameters on the ...
Although old fashioned, Picocom supports filetransfer, x-modem, y-modem, z-modem and ascii-xfr. If I where you, i'd go for z-modem. The package you are looking for is lrzsz (and notzmodem as I stated earlier). Note that it operates a bit different from scp.
wiringSerial is part of wiringPi.
wiringPi is an "Arduino" like C library to control the GPIO.
wiringSerial is a simple wrapper around the underlying Linux serial driver. It simplifies some operations. Look at the source code if you need details.
Note that wiringPi is deprecated (i.e. no longer being developed or supported by its author).