Bez tzv. CSS hacku to nepujde. Opravdu se puvodni prvek v podstate skryva a nahrazuje se novym.

Tady je to dle meho hezky vysvetleno: https://www.w3schools.com/howto/howto_css_custom_checkbox.asp