C# i .NET są ze sobą nierozerwalne. Można korzystać z .NET z użyciem innego języka, istnieją próby przeniesienia wykorzystana C# poza .NET, ale tak na prawdę .NET i C# to klasyka :)
Nie istnieje lista rzeczy, które musisz umieć - można za to stworzyć listę rzeczy i mechanizmów, które jako programista powinieneś rozumieć, a język to rzecz wtórna. Lista ta jest jednak niesłychanie długa i wciąż otwarta - po prostu musisz w pracy zawodowej umieć to, co Twój pracodawca potrzebuje.
Jako podstawę do tego możesz rozważyć spis treści "Symfonii C++" oraz "Pasji C++", czy innych książek, traktujących o języku w sposób wyczerpujący. Reszta to kwestia samodzielnego kształcenia i poznawania technologii pokrewnych.
Co do alternatyw, to istnieje wiele "zestawów" obudowujących Winapi - czasem wręcz pełnych framework'ów, jak choćby borlandowe VCL (tak dostępne w C++ Builder, jak i w Delphi - na tym ostatnim pracują w Polsce ogromne firmy, więc nie przejmuj się, jak ktoś pisze, że to pomyłka), microsoftowe MFC, czy inne, mniej lub bardziej zależne od platformy win32. Jednak .NET jest bardzo rozsądnym wyborem.