The easiest way to keep the spaces is to add a left and right margin of equal values to your RepliesContainer. Then set its HorizontalAlignment to Stretch (which should already be the default.)
Next make your RepliesContainer just list out all of the replies you need. This may make your list taller than your visible area (which is solved by the next step)
Finally make your OutsideLayout simply be a ScrollViewer.
Of course, I wouldn't approach it this way in the first place. I'd personally use a simple ItemsControl which handles the scrollbar and vertical panel and laying out the individual 2x2 replies. Something like this (in pseudo-code so it may not compile. But you'll get the idea.)
<ItemsControl x:Name="MyRepliesControl"
DataSource="{Binding MyRepliesData}">
<!-- This is the template for an individual reply.
The ItemsControl will create one instance for each reply automatically. -->
<ItemsControl.ItemTemplate>
<!-- 2x2 Reply Grid with a 24-unit margin on the left and right -->
<Grid Margin="24,0" ...>
... contents of grid cells, etc. ...
</Grid>
</ItemsControl.ItemTemplate>
</ItemsControl>
Note: This puts the left and right margins inside of the scrollbar area. If you want the margins outside of the scrollbar, instead put the Margin attribute on the ItemsControl itself.
Then you simply set the DataContext and ensure it has an IEnumerable property called MyRepliesData which has each individual reply.
This is the proper way to do it. with this approach, you can customize anything you need to visual-wise by only focusing on the 'templates' of how the data works. The ItemsControl worries about laying it all out and giving you a scrollbar. Your only responsibility is giving it the data via MyRepliesData.