A counterexample to what you assert. With babel the right spaces are used, according to French typographic rules.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{newunicodechar}
\newunicodechar{«}{\og}
\newunicodechar{»}{\fg}
\begin{document}
Une phrase en français; sans intérêt, avec signes diacritiques:
nous pouvons voir qu'il est correct!
Les \og guillemets\fg{} sont corrects aussi.
Les «guillemets» sont corrects aussi.
\end{document}

As you can see the spaces are thin before ; and ! (the same for ?), but they're normal spaces before the colon.
For guillemets, the standard way is to use \og and \fg, but one can redefine « and » for getting the same effect.
Some excerpts of the log file when \showoutput is used:
....\T1/cmr/m/n/10 f
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 a
....\T1/cmr/m/n/10 n
....\T1/cmr/m/n/10 ?
....\T1/cmr/m/n/10 a
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 s
....\penalty 10000
....\kern 1.6663
....\T1/cmr/m/n/10 ;
[...]
....\T1/cmr/m/n/10 d
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 a
....\T1/cmr/m/n/10 c
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 t
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 q
....\T1/cmr/m/n/10 u
....\T1/cmr/m/n/10 e
....\T1/cmr/m/n/10 s
....\penalty 10000
....\glue 3.33252 plus 1.66626 minus 1.11084
....\T1/cmr/m/n/10 :
....\glue 3.33252 plus 1.66626 minus 1.11084
[...]
....\T1/cmr/m/n/10 c
....\T1/cmr/m/n/10 o
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 e
....\T1/cmr/m/n/10 c
....\T1/cmr/m/n/10 t
....\penalty 10000
....\kern 1.6663
....\T1/cmr/m/n/10 !
A thin space is exactly \kern 1.6663, while the two spaces around the colon are normal interword spaces.
If you want to change the space before the colon to be a normal interword space without stretching (but with shrinking) and the space after/before open/close guillemets, just redefine \FBcolonspace and \FBguillspace:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{newunicodechar}
\newunicodechar{«}{\og}
\newunicodechar{»}{\fg}
\renewcommand{\FBcolonspace}{\hspace{\fontdimen 2\font minus\fontdimen4\font}}
\renewcommand{\FBguillspace}{\thinspace}
\begin{document}
Une phrase en français; sans intérêt, avec signes diacritiques:
nous pouvons voir qu'il est correct!
\makebox[3cm][s]{Deux: point}
Les \og guillemets\fg{} sont corrects aussi.
Les «guillemets» sont corrects aussi.
\showoutput
\end{document}

The added example with the colon is exaggerated on purpose.
!?;«»and normal space with:, I believe. – egreg Oct 25 '14 at 12:56babelpackage do. – Mico Oct 25 '14 at 13:51