@0xbf Just in case you are still looking for a solution, here is the best approach I have. First though - I too would emphasize the desire for adding whitespace with just carriage returns. I have a default metadata section that is added at the end of every note, and I greatly prefer to have this stuff pushed down away from the main text of the note.
Also, there are many ways to add whitespace that look fine in the preview mode, but look rather messy in the edit (markdown) mode. Adding a bunch of <br>'s for instance is not my definition of pretty white space when you look at the markdown version.
So I solved it by using a bunch of \ characters, one per line, in multiple lines. Then, with the very last one I add a single tab key. This is at least somewhat clean looking inside both the straight text version and the preview version.
Here is the markdown example:
Last Text
\
\
\
\
\
<tab>
New Text
which translates to
Last Text
New Text
What this is doing is using the “line break” feature of Obsidian’s MD parser to add in line breaks. Eventually, it needs to force a full paragraph break by seeing a normal character (a space won’t work). For a while I used a \. on the final line (which displays a single dot). Then I realized that a tab character in Obsidian will be translated as a valid empty character.
This is the closest I’ve gotten to something that looks good in both markdown and preview modes.