Assign automatically and manually modify category

Well, what is the expected behavior? You use wp_set_object_terms and pass just a single term.

If you want to make sure the specified term is assigned to the post, while being able to add as many other terms as you like, try it like this:

function add_bookcategory_automatically( $post_id ) {

    if ( ! wp_is_post_revision( $post_id ) ) {
        $bookcat = 4;
        wp_add_object_terms( $post_id, $bookcat, 'category');
    }
}
add_action( 'publish_post', 'add_bookcategory_automatically' );

See wp_add_object_terms.