As for the discrepancy, Node only knows when it has been written to the socket handle (passed on to the OS), which usually has it's own buffering in the OS.
Wireshark, I'd assume, only sees packets that made it through the OS buffers and have been written to the wire.
The discrepancy is when data has made it to the OS but does not make it to the wire, this would happen if the connection was forcibly terminated on the other end.
Depending on how low-level Wireshark is, it may also be counting re-sends (when a TCP packet is lost, the packet will get re-sent, causing additional bytes on the wire that your Node app would have no possible way of knowing about (unless you use a module that implements TCP in Node, there might be one of those...).
I don't have any suggestions about how to resolve this discrepancy, sorry!
If I wanted to know exactly how many bytes were being sent, I'd probably use OS-specific functionality (e.g. shell out to ifconfig in Linux) to simply poll it, but that wouldn't get any per-connection stats.