Unicode code points are only low-level semantic characters. They form higher-level grapheme clusters composed out of an arbitrary number of code units. In a terminal, the cells are generally grapheme clusters, but free flowing text has higher level groups due to ligatures, etc.