Si udělej vlastní framework, je to pár řádku. Prostě musíš spárovat Views a ViewModels, třeba podle atributu, nebo jmenné konvence. Uděláš si třeba nějakého předka tvého MainViewModel, tam při bootstrapu projdeš assembly a spáruješ třídy. Nebo to budeš dohledávat za běhu, zas takové zdržení to není. Když budeš chtít vytvořit okno se skóre, vytvoříš si v hlavním ViewModelu nějaký ScoreViewModel a zavoláš třeba v MainViewModelu ShowViewModel(scoreViewMode). MainViewModel si k scoreViewModelu najde View, vytvoří jeho instanci, vytvoří okno, do Contentu okna vrazí View a do DataContextu View vrazí ViewModel.
To je jedna z mnoha variant. Best Practices jsou jasná, nedělej View, okno, cokoliv viditelného bez ViewModelu, nešahej z ViewModelu (a proboha z Modelu už vůbec ne) na cokoliv vizuálního. No a z těchto důvodů musíš mít nějakou infrastrukturu, abys mohl z ViewModelu otevřít okno.