Why do I want to enable "BorderSize" (ie, overlapping fragments), but not apply it to the output?
Consider all the workflows in which you want to apply the fun function to each block of size MxN in the image, but in order for the result to be valid, you really need border pixels around the block MxN. (filtering, morphology, any function, where one value of the output pixel depends on the environment mxn). you need an (M + m, N + n) input block to compute one output block MxN.
A simple example (aka makeup):
h = fspecial('gaussian', 3); im = imread('peppers.png'); B1 = blockproc(im, [20 20], @(bs)imfilter(bs.data,h)); imshowpair(im, B1,'montage');

Pay attention to the grid lines? In this particular case, you simply name imfilter in the full image. But blockproc allows you to work with images larger than your physical memory. So, for this discussion, imagine im is a huge tiff file.
For this workflow - if you just used BorderSize to include a border of 3 pixels around each 20x20 block and didn't crop the output border:
h = fspecial('gaussian'); im = imread('peppers.png'); B1 = blockproc(im, [20 20], @(bs)imfilter(bs.data,h), 'BorderSize', [3 3], 'TrimBorder', false); imshowpair(im, B1,'montage');

So - you really need to crop the border (default)
h = fspecial('gaussian'); im = imread('peppers.png'); B1 = blockproc(im, [20 20], @(bs)imfilter(bs.data,h), 'BorderSize', [3 3], 'TrimBorder', true); imshowpair(im, B1,'montage');

Note As an example, I used IMFILTER. For small images, use IMFITLER directly. Only for large images can IMFITLER be used in BLOCPROC.