I think you have a number of options here:
- You could offset the labels of each layer so they appear stacked as shown (a very easy and slightly simplistic option).
- You could do a spatial join to a create a 'labels layer' and then create a multi-line label based on the joined fields (a little more refined)
- create a labels layer as above but then create an additional field with an algorithm that orders the labels by date with a known separator, which you use to create a multi-line label (an improvement on 2).
To add the other element (area etc) you can add the layer a second time and then include the area label with its own offset (above the centroid). Yes you could do this all from one layer but its a pain to layout. Adding a duplicate layer to your map makes life simple and gives you more control over fonts and positioning etc. You can give it a null style (so it is effectively invisible and you only see the labels).
So in your example above, I might be tempted to have 3 layers. The first has a label showing the Area and % values offset above the centroid in bold with a larger font. Next I would have another copy of the layer with the labels on the centroid and whatever those letters in grey with the broad white outline are. Then I would have my 'labels layer' created as described above with the labels offset below the centroid and a smaller font etc. Only one of the layers would have a style that is visible (i.e. set the pen width of the outline to nothing and have no fill for the polygon for the invisible ones).