In addition to the answers already given, which offer up the Razor Mediator, Get eXtension and some .Net based TBB methods, there is also a fairly simple, works out of the box, pure DWT solution which is often overlooked...
In DWT, you can use RenderComponentPresentation(Component ID, ComponentTemplate ID)
to call templates from within templates.
So your main template's DWT would look like this:
<Content>
<!-- TemplateBeginRepeat name="body" -->
<body>
<!-- TemplateBeginRepeat name="link" -->
@@RenderComponentPresentation(Field, "someComponentTemplateID")@@
<!-- TemplateEndRepeat -->
</body>
<!-- TemplateEndRepeat -->
</Content>
someComponentTemplateID refers to another Component Template, which is responsible for rendering the content of your linked Component, like this:
<value>@@Component.Title@@</value>
This is obviously a simple example, but in the "child" Component Template you can render whatever you want from the linked Component. You can also call other "child" Component Templates if you want.
If you have a common rendering of a particular content type and you want to wrap that in different markup or render them both singly and in some kind of a loop then this can be very powerful, as you only have to maintain one DWT that is responsible for rendering the main part of the markup.