Yeah this is explainable by how these modes work.
Note: The input to the mode must be a multiple of the blocksize. (That's why this can be lower than 128-bit for a 128-bit cipher)
Now observe how CBC works:
NewBlock(LastCiphertextBlock,PlaintextBlock):=Encrypt(LastCiphertextBlock XOR PlaintextBlock)
As you can see this can only encrypt a multiple of the actual blocksize of the cipher.
Now let's see how OFB works:
NewBlock(State,Plaintext):=State=Encrypt(State);return State XOR Plaintext
So you're basically encrypting some state over and over and use this state as pad to encrypt the plaintext. Thus you're converting your blockcipher into a streamcipher. As the application can now store the state and only generate new states as every old bit has been used, one can encrypt arbitrary data sizes.
Now let's investigate CTR:
NewBlock(Counter,Plaintext):=Counter++;return Encrypt(Counter) XOR Plaintext
As you see this is the exact same logic as with OFB, you generate the pad using some state (the counter). As you can store this pad until the next pad-block is needed you can encrypt data bit-by-bit.
Finally let's dive into (n-bit-)CFB:
NewBlock(LastCipherTextBlock,Plaintext):=Plaintext XOR Encrypt(LastCipherTextBlock)
So again you're converting to a stream cipher, but this time you take the previous ciphertext block (which is known), encrypt it and XOR it against the plaintext. As you can once again store the pad and perform no blocksize operation on the plaintext, you can use arbitrary plaintext sizes.