I did the changes mentioned.
1. Added the square brackets
2. Changed the 1 to a 0
;; Kaithi composition rules
(let ((consonant "[\x1108D-\x110AF]")
(non-consonant "[^\x1108D-\x110AF\x110B9]")
(vowel "[\x110B0-\x110B8\x110C2]")
(anusvara-candrabindu "[\x11080\x11081]")
(virama "\x110B9")
(number-sign "\x110BD")
(number-sign-above "\x110CD")
(numerals "[\x966-\x96F]"))
(set-char-table-range composition-function-table
'(#x110B0 . #x110B8)
(list (vector
(concat consonant vowel anusvara-candrabindu "?")
1 'font-shape-gstring)))
(set-char-table-range composition-function-table
'(#x110B9 . #x110B9)
(list (vector
(concat consonant "\\(?:" virama consonant "\\)+"
vowel "*\\|" consonant virama)
1 'font-shape-gstring)))
(set-char-table-range composition-function-table
'(#x110BD . #x110BD)
(list (vector
(concat number-sign numerals)
0 'font-shape-gstring)))
(set-char-table-range composition-function-table
'(#x110CD . #x110CD)
(list (vector
(concat number-sign-above numerals)
0 'font-shape-gstring))))
Now when typed alone they do not appear but when written with numbers, they appear as NOTDEF glyphs