In QGIS, a linear layer can work quite well for oriented or curved labels like what you show in the left photo in your question. It might be much simpler to go with that option but if using a separate layer to precisely position the label isn't viable, there is always the option to move the spatially joined labels freely using the label toolbar. To make it appear, right click on any toolbar and tick its checkbox. From there:
- Click on the Move label button
- Click on the existing label in your lake layer. It will ask you to choose a key to link to the internal project data. Choose a relevant field.
From now on, while the label moving tool is active, you can click and drag your label anywhere you want. The entity will become red and you will see the outline of your label with its anchor point as you move it around.
Of course, this is all manual so for large datasets it's not very time-efficient. You can also rotate the labels with the corresponding tool.
Personally, when I need to place a label very precisely, I use a separate layer, either point or line depending on the needs.