CGA cards generally only had 16k of video memory. That's just tiny bit larger than what is needed to store one single screen of 320x200 pixels at 4 colors (or 640x200 pixels at 2 colors). 4 colors means that you need 2 bits per pixel to store that color information (2² = 4). At 320x200 pixels, that makes 128,000 bits = 16,000 bytes. There's basically no video memory left to do any cool tricks with. Well, technically the CGA cards should have 16,384 bytes of memory, so there should be some free space, but I'm not even sure if CGA cards have any reprogrammable controllers that would enable tricks like the ones Carmack used for the Keen games (the most important being a variable start address, a variable "virtual screen width" and a pixel panning feature).
If I understand VileR's post correctly, CGA does at least have a variable start address, but the card would also need to "wrap around" at the end of the video memory to provide a decent method of doing smooth scrolling without having to redraw the whole screen. I'm not sure if CGA cards can do that, since not even all EGA-compatible cards handle that "wrap-around" correctly (that's why Keen 4-6 and Keen Dreams have that so-called "SVGA compatibility mode"). The strange odd/even line split in the memory layout of the 320x200 pixel CGA graphics mode might also be a problem when it comes to wrap-around:
bytes 0 to 7999: lines 0, 2, 4 ... 198
bytes 8000 to 8191: unused
bytes 8192 to 16191: lines 1, 3, 5 ... 199
bytes 16192 to 16383: unused
Without pixel panning and a variable virtual screen width, the smoothest thing you can do in CGA would be pure vertical scrolling. This could be done efficiently in hardware (assuming the video memory wraps around correctly), by simply drawing the new lines for the top or the bottom of the screen as they "scroll" into view and then updating the start address to move the entire screen up or down by 1 or 2 lines. Or you could just implement it by having a bigger screen buffer in main memory and copying the appropriate section of that block into video memory for each frame, like the CGA Keens do it.
Personally, I never had a PC with a CGA or EGA card. Every PC I ever used had at least an (S)VGA card in it, so there's really no way for me to test the true capabilites of a CGA card.