Der Code im Themenstart enthält schon einige professionelle Mittel bzw. sinnvolle Ansätze,  ist aber teilweise schwierig nachzuvollziehen und vielfach unübersichtlich.  
· Die Balkenbeschriftung in der Mitte sollte scheints ab Version 1.8 der Default sein (?). Letztes Beispiel hier: https://ipfs-sec.stackexchange.cloudflare-ipfs.com/tex/A/question/36114.html <br>
Mit `\pgfplotsset{compat=newest}` wird das auch so. Allerdings müssen dann diese ganzen manuellen Verschiebungen, die im Code standen wieder rausgenommen wuerden.
· Die Zusatzbeschriftung ("3-jährige" usw.) kann man mit `extra x ticks` ergänzen. Die Trennlinien würde ich dann als draw einzeichnen. 
· Was diese Linie "Zufallsniveau" angeht verhindert diese "point meta" Sache hartnäckig, dass man noch andere Arten addplots ergänzt; z.B. einen coordinates-plot, was hier am einfachsten wäre.  Das tüftel ich jetzt nicht aus. <br>
Diese Gerade lässt sich auch als draw ergänzen. Soll sie im Vordergrund stehen, schlage ich vor, entsprechende Layer-Ebenen zu definieren und eine scope-Umgebung zu verwenden.
**€dit:**  Ok, wie mir gesagt wurde geht diese Ergänzung als coordinates-plot in der (sehr "einfachen"...) Form <br>
`\addplot[purple, tick] [nodes near coords={},sharp plot,stack plots=false,point meta=y] coordinates {(-1,30) (8,30)} node[pos=0, anchor=east,  font=\tiny, align=left]{Zufalls-\\niveau};` <br>
rückt aber genauso, wie die einfachere draw-Version davon, nicht in den Vordergrund. <br>
Je nachdem ob diese Linie vor oder hinter den Balken sein soll, wird man ggf. Layer-Ebenen definieren müssen. 
PS: Wenn diese ganzen Bezeichnungen in der Datentabelle schon stehen, dann nicht zusätzlich sowas machen "`symbolic x coords={TB,FB,IG,SFB,vTB,vFB,vIG,vSFB},`". Bisschen Mühe geben, rausfinden wie man die Tabellendaten ausliest.  Es ist nicht immer ganz trivial, aber intuitiv muss es irgendwie gehen (wenn man das Paket kennt). ;)   Siehe Code unten: <br>
`xticklabels from table={\data}{[index]0},
xtick=data,` <br>
in Verbindung mit `x expr=\coordindex`.
PPS: Ich habe mir mal noch einen kleinen Spaß erlaubt und mit Hilfe der Seite <br>
`% Farben definieren
% https://html-color-codes.info/colors-from-image/
\definecolor{myorange}{HTML}{FFD686} 
\definecolor{Myorange}{HTML}{F9BC00} 
\definecolor{myblue}{HTML}{A8C5E7} 
\definecolor{Myblue}{HTML}{5997D0}` <br>
die Farben des Ausgangsbildes ermittelt. :)
[![alt text][1]][1]
    \documentclass[a4paper,12pt]{article}
    %\usepackage{graphicx}
    %\usepackage{tikz}
    %\usepackage{tabularx}
    \usepackage{pgfplotstable}
    \usepackage{pgfplots}
    
    % ================
    % Problem  "nodes near cords in die Mitte" ist wohl ab v1.9 default; 
    % siehe  https://ipfs-sec.stackexchange.cloudflare-ipfs.com/tex/A/question/36114.html
    % \pgfplotsset{compat=1.9}  % geht
    \pgfplotsset{compat=newest} % geht auch
    % siehe aber auch unten "every node near coord/.append style={...}"
    % ================
    
    \begin{document}
    % ================
    % Farben definieren
    % https://html-color-codes.info/colors-from-image/
    \definecolor{myorange}{HTML}{FFD686} 
    \definecolor{Myorange}{HTML}{F9BC00} 
    \definecolor{myblue}{HTML}{A8C5E7} 
    \definecolor{Myblue}{HTML}{5997D0} 
    % Diagrammdaten erzeugen
    \pgfplotstableread[col sep=comma,header=false]{
    TB,11,39
    FB,23,26
    IG,11,38
    SFB,12,38
    vTB,6,15
    vFB,12,9
    vIG,11,8
    vSFB,17,1
    }\data
    
    \pgfplotstablecreatecol[
    create col/expr={\thisrow{1} + \thisrow{2}}
    ]{sum}{\data}
    % Tabelle ansehen: 
    % \pgfplotstabletypeset[string type]{\data}
    
    \pgfplotsset{
    percentage series/.style={
    table/y expr=(\thisrow{#1}/\thisrow{sum}*100),
    table/meta=#1,
    table/x expr=\coordindex,
    }   }
    % ================
    
    % Weitere Einstellungen: 
    \pgfplotsset{
    percentage plot/.style={
    point meta=explicit,
    every node near coord/.append style={text=black,
    % Diese Einstellungen verhindern wesentlich die Position der nodes near cords in der Mitte: 
    %    xshift=17pt,
    %    yshift=-5.15pt,
    %    anchor=east,
    %       font=\footnotesize,
    %    color=black,
    %            align=center,
    %        text width=1cm,
    },
    nodes near coords={%
    % ================
    % Alle Zeilenenden hier auskommentieren, sonst diverse Leerstellen...
    \pgfmathtruncatemacro\iszero{\originalvalue==0}%
    \ifnum\iszero=0%
    %       \pgfmathprintnumber{\originalvalue}$\,\%$\\
    \pgfmathprintnumber[fixed zerofill,precision=0]{\pgfplotspointmeta}%
    \fi},
    % ================
    %nodes near coords align={center}, % hat m.E. hier keinen bes. Effekt
    % ================
    yticklabel=\pgfmathprintnumber{\tick}\,$\%$,
    ymin=-10,
    ymax=110,
    %        enlarge y limits={upper,value=0.1},
    visualization depends on={y \as \originalvalue}
    },
    }
    
    \begin{tikzpicture}
    \begin{axis}[
    ybar stacked,
    %       axis on top,
    height=8cm,  %    width=10cm,
    percentage plot,
    %   axis y discontinuity=crunch,
    bar width=0.65cm, 
    % ================
    % Immer versuchen nicht doppelt zu arbeiten: 
    % Nicht
    % symbolic x coords={TB,FB,IG,SFB,vTB,vFB,vIG,vSFB},
    % sondern
    xticklabels from table={\data}{[index]0},
    xtick=data,
    % was mit x expr=\coordindex (siehe oben) möglich wird.
    % ================ 
    x tick label style={rotate=45, anchor=east, xshift=-1.5mm, yshift=-2mm},
    %    enlargelimits=0.15,
    legend style={
    at={(0.5,-0.5)},
    anchor=south,
    legend columns=-2    },
    % Weitere Annotationen
    xmin=-1, xmax=8, 
    extra x ticks={2.5,7},
    extra x tick labels={3-jährige, 4-jährige},
    extra x tick style={
    major tick length=0mm,
    % Rumgeschiebe von oben rückgängig machen: 
    tick label style={align=center, anchor=north, xshift=1.5mm, yshift=-14mm, rotate=-45}, 
    },
    clip=false,
    ]
    \addplot \addplot[fill=myblue, draw=Myblue] table [percentage series=1] {\data};
    \addplot \addplot[fill=myorange, draw=Myorange] table [percentage series=2] {\data};
    \legend{\strut leere Box, \strut volle Box}
    
    % "Zufallsniveau"
    \draw[red, thick] (-1,50) node[anchor=east, font=\tiny, align=left] {Zufalls-\\niveau} -- (8,50);
    %alternativ 
    \addplot[purple, tick] [nodes near coords={},sharp plot,stack plots=false,point meta=y] coordinates {(-1,30) (8,30)} node[pos=0, anchor=east,  font=\tiny, align=left]{kein \\ Zufalls-\\niveau};
    
    % Trennstrich x-Achse
    \foreach \x in {-1,4,8}{\edef\temp{\noexpand
    \draw[] (\x,-10) -- (\x,-25mm);
    }\temp}
    \end{axis}
    \end{tikzpicture}
    \end{document}
  [1]: https://texwelt.de/upfiles/56555555_3.pnghttps://texwelt.de/upfiles/56555555_4.png