The ability to move sprites smoothly between kernel sections is a major mark of refinement. Of course, some games by nature do not particularly require this (e.g. Strat-O-Gems), and many--perhaps most--games require it for one player sprite but not the other. Sometimes a game's graphics can be arranged so as to 'justify' a gap between zones. In PitFall!, for example, between the 'log zone' and the 'scorpion zone' are a few scan lines which appear 'in front of' the player.
Ideally when using multiple kernels, each kernel will finish with enough time to enter the next one without losing a scan line. That isn't always possible, though, especially with zones requiring horizontal motion. In such cases, it may be necessary to have a special 'kernel' which is responsible for just one scan line, or to 'integrate' kernel-ish code within the setup routine for the next few scan lines. In a few cases, it may even be necessary to compute, outside the kernel, what GRPx etc. values will be required on certain scan lines and store them, so that when those scan lines roll around you can simply "LDA watertop_GRP0 / sta GRP0" without having to do any sort of skipdraw/switchdraw/flipdraw/etc.
In Toyshop Trouble, the main screen is drawn using about five iterations of a 32-line loop (the loop begins and ends in the middle, so it's not exactly 5). Each loop is split into 16-line 'zones'. The first zone is responsible for setting toy Y positions and drawing the paint pots and conveyors; the second zone is responsible for drawing the toys. In both zones, Y counts from 15 to 0.
Every scan line in the first zone starts with something like:
sta WSYNC
lda (shape0a),y
sta GRP0
lda (color0),y
sta COLUP0
dey
If part of the player is in that zone, shape0 will point to 16 bytes of RAM which hold the shape data for that zone; otherwise it will point to 16 bytes of zeroes in ROM. Color0 will point into the first of two copies of a 16-byte color table in ROM. Although player 0 will only be visible on 17 scan lines, the color will repeat every 16 lines (the elf's hat and shoes are the same color, so that works nicely).
The first zone does many different tasks, each of which takes well under a scan line to complete. Among those tasks are setting up the shape0b pointer (which will be used in the other zone). The last things the top zone does before starting in with the other zone are loading the shape0a pointer as appropriate for the next upper zone (17 lines later) and resetting Y to 15. It then does a WSYNC and falls into the lower zone.
The lower zone runs a 15-scan-line loop to draw the toy shapes. Each line starts with code like the above, but without the WSYNC (the loop is counted out to 76 cycles/line) and using (shape0b) instead of (shape0a). After the loop exits, the code does one last update of GRP0/COLUP0 using (shape0b),y and (color0),y and restarts the earlier loop.
This approach to handling player motion can be somewhat RAM-hungry (if two 16-byte shape tables are used in RAM) or code-hungry (if each shape in ROM has 15 bytes of zeros before and after it) but it makes it possible to have single-line color and shape resolution for the player character even in a kernel that is otherwise jammed to the gills with code.