You have a few options ...
#1 - Create a cursor that has two sets of detail lines with another extra field called StubNo so you can do a data group on Check Number and another one on Check Number + Stub Number. The check itself goes in the data group header for Check Number. The data group header and footer for Stub Number is used to fudge the spacing for the two stubs. When building this cursor you have to put dummy lines to fill up the stub with exactly the right number of lines. You also have to take great care to deal with a check that might overflow to a 2nd page.
#2 - (This is the method that I describe in my book). Create one giant record with all the check information and stub information. For example, if the stub contains up to 10 lines of invoice information you would have fields named Date1, Date2, Date3... Date10, InvNo1, InvNo2, InvNo3...InvNo10, Amt1, Amt2... Amt10. And so on and so on. In the report definition you basically make one giant detail band as tall as the page (or as close as possible). Then you add all the fields stacked on top of each in the stub area .. Date1, Date2, etc.
#3 - Upgrade to VFP 9 and you could do this with a report listener. Use a directive in the report definition for all the stub fields. In the Render method of the listener, have it render the stub object twice .. once where it's defined and a second time using an offset to print it farther down the page.