При такой разметке на CSS никак.
Вариант без JS:
<input type="checkbox" id="ch">
<div>
<span id="sp" class="sp">TEST</span>
<label for="ch">тут стилизованный чекбокс</label>
</div>
#ch:checked + div .sp {}
Суть в том, что вы скрываете сам инпут. Делать это нужно используя CSS паттерн visually-hidden (вариантов несколько, легко гуглятся) для того, чтобы осталась функциональность для доступности.
А стилизуется лейбл или его псевдоэлемент.
Клик происходит по лейблу, но инпут переключается, потому что они связаны. Находится при этом лейбл может где угодно.
Нюанс один: при клике на лейбл, браузер прокручивает страницу к тому месту, где находится инпут. Так что аккуратно, если они совсем в разных местах.