but instead of arbitrary adding a 0.25em before and 1em after the punctuation mark you should use the real nnbsp (U+202F) before and real normal space (U+0020) after.
I don't think so. Space characters don't mix very well with TeX glue and should best be avoided, generally speaking. In particular, all inter-word spaces that are input in the TeX source as one or more of U+0020 are simply ignored, and replaced by normal inter-word glue, with its appropriate stretchability and shrinkability. This has always been the case in TeX and is not going to change. All other types of Unicode spaces should really, in my opinion, be processed in the same way, while respecting their additional properties in the case of non-breakable spaces, for instance. In addition, characters like U+202F are very badly supported across fonts, and if you take in account the fact that the most appropriate width will probably change depending on the language, you're likely to observe much more arbitrary results if you use the glyph for that character in font. I seriously doubt you want to rely on the font for that.
Why? Let me take your example again:
{\setcharacterspacing[frenchpunctuation]a? aa? aaa? abba?}
a\,? aa\,? aaa\,? abba\,?
Surprise: the first line is longer than the second. It's because sizes of the U+0020 and U+202F depend on the font design, their size are not exactly 1em and 0.25em.
That's not the reason. The reason is simply that \, is defined as a \kern by one sixth of an em (see core-spa.mkiv: it's equivalent to \thinspace, which is \kern .16667em). In the first line, the value of .25em is defined in core-spa.mkiv; you can redefine it if you want. In any case, every space is completely controlled by ConTeXt, we don't let the font mess around. For that matter, Latin Modern doesn't have a glyph for U+202F, so if we'd use it, we'd just see nothing: there would be no space at all, see attached file.
Moreover, this is true that in french typography we should use a thin space before some punctuation mark, and a thin space in France *was* one fourth of an em. BUT due to modern digital typography, a thin space now correspond to something like one fifth of an em. In digital typography, the normal space, i.e. inter-word separation, i.e. "espace justifiante" in French, has generally a size around one fourth of an em, calculated by the engine (you know that better than me). The thin space is a bit more than a half of the inter-word separation, i.e. between 1/8 and 1/6 of an em.
All this really calls for more coordination in order to produce decent specifications, in my opinion. If you think ConTeXt's default should be different, it's fine and I encourage you to contact Sébastien to discuss about it. Report then to Hans and Peter for the implementation.
So I *really* believe that you should not define space before and after punctuation with "arbitrary" em spacing. There must be a way to do a "search and replace" with the correct glyphs (U+202F and U+0020) before and after punctuation marks.
As my example file demonstrates, we clearly shouldn't use the glyphs from the font. Arthur