Let's analyze a few versions. In all cases the showframe package is employed for the output (but not shown in the code)
First version (pdflatex)
\documentclass{scrartcl}
\begin{document}
Eblouissement eblouissement eblouissement eblouissement
eblouissement eblouissement eblouissement
(Eblouissement) (eblouissement) (eblouissement) (eblouissement)
(eblouissement) (eblouissement) (eblouissement)
D'eblouissement d'eblouissement d'eblouissement d'eblouissement
d'eblouissement d'eblouissement d'eblouissement
\end{document}

Comment
No hyphenation, as expected.
Second version (pdflatex)
\documentclass{scrartcl}
\lccode\(=(
\lccode\)=)
\lccode\'='
\begin{document}
Eblouissement eblouissement eblouissement eblouissement
eblouissement eblouissement eblouissement
(Eblouissement) (eblouissement) (eblouissement) (eblouissement)
(eblouissement) (eblouissement) (eblouissement)
D'eblouissement d'eblouissement d'eblouissement d'eblouissement
d'eblouissement d'eblouissement d'eblouissement
\end{document}

Commant
You see that there is no overfull. The same happens with lualatex.
Third version (pdflatex)
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\begin{document}
Eblouissement eblouissement eblouissement eblouissement
eblouissement eblouissement eblouissement
(Eblouissement) (eblouissement) (eblouissement) (eblouissement)
(eblouissement) (eblouissement) (eblouissement)
D'eblouissement d'eblouissement d'eblouissement d'eblouissement
d'eblouissement d'eblouissement d'eblouissement
\end{document}

Comment
There are overfull boxes, because of the hyphenation minima stated by babel-french, but the “words” containing parentheses and apostrophes are hyphenated.
Fourth version (xelatex)
\documentclass{scrartcl}
\lccode\(=(
\lccode\)=)
\lccode\'='
\begin{document}
Eblouissement eblouissement eblouissement eblouissement
eblouissement eblouissement eblouissement
(Eblouissement) (eblouissement) (eblouissement) (eblouissement)
(eblouissement) (eblouissement) (eblouissement)
D'eblouissement d'eblouissement d'eblouissement d'eblouissement
d'eblouissement d'eblouissement d'eblouissement
\end{document}

Comment
This reproduces your issue. What's the difference? XeLaTeX can (and does) use a mapping file for fonts, because of a different algorithm it uses for typesetting. In this mapping file, ASCII apostrophes are substituted with “real” apostrophes U+2019.
Solution (xelatex)
\documentclass{scrartcl}
\lccode\(=(
\lccode\)=)
%\lccode\'=' % not needed
\lccode"2019="2019
\begin{document}
Eblouissement eblouissement eblouissement eblouissement
eblouissement eblouissement eblouissement
(Eblouissement) (eblouissement) (eblouissement) (eblouissement)
(eblouissement) (eblouissement) (eblouissement)
D'eblouissement d'eblouissement d'eblouissement d'eblouissement
d'eblouissement d'eblouissement d'eblouissement
\end{document}

babel. – egreg Feb 22 '24 at 14:37