You are correct GetHeadersByUIDAsync and Get methods cause \UNSEEN flag to be removed. IMAP server uses this flag to remember which messages were already read by user.
You can use PeekHeadersByUID method or any of the Peek method family.
You can also use MarkMessageSeenByUID and MarkMessageUnseenByUID to mark emails as seen/unseen:
using(Imap imap = new Imap())
{
imap.Connect("imap.example.com"); // or ConnectSSL for SSL
imap.USeBestLogin("user", "password");
imap.SelectInbox();
List<long> uids = client.Search(Flag.Unseen);
client.MarkMessageSeenByUID(uids);
imap.Close();
}