I’ve done some debugging, it came out that this line caused wrong behavior:
$settings = wp_parse_args( $settings, $defaults );
I wondered why it’s after this line which supposedly does the same:
$settings = get_option( 'acau_settings', $defaults );
These 2 lines one after another were part of code from a wiser man, so I thought that maybe it’s some kind of fallback. It looks like only the latter works correctly for checkboxes.