In modern browsers which include Internet Explorer 9 and later, it is more straightforward to create checkbox replacements with your preferred styling, without using JavaScript.
It is worth noting that the fundamental issue has not changed. You still can't apply styles such as borders directly to the checkbox element and have those styles affect the display of the HTML checkbox. What has changed, however, is that it's now possible to hide the actual checkbox and replace it with a styled element of your own, using nothing but CSS. In particular, because CSS now has a widely supported :checked selector, you can make your replacement correctly reflect the checked status of the box.