Второй вариант более правильный, но вы вложили в него неправильный смысл, вы косвенно привязали
main-nav к контексту main и это очень заметно в 3-м примере, где вы эту проблему гиперболизировали, 3-й пример ужасен, никогда так не делайте. 1-й пример правильный по именованию, но не всегда будет правильный по структуре, так как навигация это скорее всего отдельный блок. В результате более правильно, коротко и лаконично будет примерно так:
<div class="main">
<nav class="main__nav nav">
<ul class="nav__list">
<li class="nav__item">
<a href="#" class="nav__link">Home</a>
</li>
<li class="nav__item">
<a href="#" class="nav__link">Work</a>
</li>
<li class="nav__item">
<a href="#" class="nav__link">About us</a>
</li>
</ul>
</nav>
</div>
Вам правильно сказали про миксы, но более правильно делать элемент-модифиткатор с названием блока к которому миксуем, то есть
main__nav nav и если делать микс по вашей схеме, то получится вот такая тавтология
main__main-nav main-nav, а если сделать 2 микса (что иногда тоже бывает) в 3-ем примере, то становиться плохо
main__main-nav-list main-nav__main-nav-list main-nav-list и возможно на таком примере вам станет более понятено, почему не надо так делать и какую задачу решает БЭМ
каждый пишет как ему удобно?
Обычно такое происходит, когда не до конца понимают концепцию, либо просто не хотят правильно структурировать так как это может занять больше времени чем хотелось бы, в итоге входит привычку упускать некоторые моменты и получается свой БЭМ с блекджеком..