And So I am excluding posts is several groups from the website (groups 4-11).

I'm doing this while using following code:

if (have_posts()) : while (have_posts())  : the_post(); 
    $category = get_the_category();

     if($category[0]->cat_ID > 11 || $category[0]->cat_ID < 4){

This activly works to exclude the groups posts in the page but it doesn't support the publish count per page being 10 or anything set to within the Admin.

Wouldso would I programatically decrement the publish count by one for posts I skip within the Wordpress Loop and so i exclude the course posts i don't want but additionally support the equivalent posts per page?

The simplest (although not most effective) method of doing this really is to exchange the worldwide $wp_query with a custom query using category__in...

global $wp_query;
$wp_query = new WP_Query(array("category__in"=>array(4,5,6,7,8,9,10,11)));

...then perform the loop...

while (have_posts()){


This makes the paging accurate, and you will depend around the high-level templating functions like next_posts_link().

Most likely a far more efficient way (that does not get rid of and replace $wp_query) is always to wreck havoc on the initial query of all time performed...

 add_action('parse_query', 'my_parse_query');
 function my_parse_query(&$q){
      //decide if you want to mess with the query....
      //if not, return
      $q->set_query_var("category__in", array(4,5,6,7,8,9,10,11));

my_parse_query could be known as on every query, including individuals for pages and single posts, so you would need to then add logic towards the function to simply add category__in where it made sense.