but I have no evidence of NonspacingMark ever being in the normalized string.
There are three in the example you gave:
use strict;
use warnings qw( all );
use feature qw( say );
use utf8;
use open ':std', ':encoding(UTF-8)';
use charnames qw( );
use Unicode::Normalize qw( NFKD );
my $html = "Lubomír,Bartoňová";
my $decomposedHtml = NFKD( $html );
say charnames::viacode(ord($_))
for $decomposedHtml =~ /(\p{NonspacingMark})/g;
Output:
COMBINING ACUTE ACCENT
COMBINING CARON
COMBINING ACUTE ACCENT
The code you posted is a hack to find an ASCII "equivalent" to the input.