As far as I know you can't use the built in pagination if you filter the DOSet. The pagination only looks at the original SQL query to figure out what/how to paginate so if you filter afterwards it gets very confused. So unless there's a way to rewrite that code so that it becomes an SQL query which gives you exactly what you need, SilverStripes pagination can't help you.
I've been thinking about either rolling my own pagination code for this scenario (which is pretty common on some sites I've built) or try to figure out a way to write an SQL query that factors in canView.
and this has allowed all blog postings which is fine for a quick fix, but as I add more posts I'll need to find a solution. I don't actually understand what the code is doing but obviously it is limiting the posts that are appended into $newSet. Removing this code shows all blog posts but it actually shows the pagination links now too, which are invalid because all posts are shown.
I had the same problem too but mine wasn't associated with the BlogHolder. I was using custom page types and using a dataobject::get to get my custom pages in a paginated view.
Actually, there is an easy fix to this. Instead of modifying the core code, you can just edit your BlogHolder templates files and it should work painlessly as expect.
<% control BlogPosts %>
<% if canView %>
<!-- The Post here -->
<% end_if %>
<% end_control %>
The embargo and expiring modules comes with the canView function. As you can see, you can use it in your template to filter posted based which posted get seen (you would see everything regardless of embargo or expiry restrictions if you are an admin) based on the embargo and expiry restriction.
It kind of does but you still get pretty weird behaviour. The way SilverStripes standard pagination works it only selects for example 10 rows from the database at a time. Since you don't know how many of those will pass canView with your code we'd get a variable number of BlogPosts depending on the canView settings. So for example page 1 could show 8 posts and page 2 could show 4 posts etc, and that's not ideal.
What you'd ideally want is a filtered set that is paginated afterwards. That way you'd get the same amounts of BogPosts per page. I actually have a solution for this, I'll post the code in this thread later today hopefully.