1. According to the IRC spec the line should be terminated with a $CRLF not a $LF. But there is no $CR in there as you would expect.
That's right, mIRC has always sent $lf terminated lines to the server. There are no plans to change this. It is actually mentioned in RFC1459 that a server will accept cr/lf/crlf as end of line markers.
2. According to this philosophy, IN lines should also have a $CRLF or $LF at the end because that is part of the line as it is received from the server.
For a number of reasons, it had to be implemented in the current way. It is impossible to change it. So you simply need to be aware of this when using parseline.