No magic here
$(<file) isn't removing the \n, it's just a shortcut to $(cat file) which itself is a better way of doing `cat file` .
It is indeed the echo command that removed the \n.
Echo is displaying each of its arguments separated by spaces and ignoring the last \n of each of it.
If you have embedded new-lines in the files, you must process them another way.