Below just proof of concept how you can use standard <lightning-record-view-form>
&<lightning-record-edit-form>
to fit your requirements.
Demo of Contact Detail Screen with related Account Information
HTML
<template>
<lightning-record-edit-form record-id={recordId}
object-api-name="Contact">
<div class="slds-grid">
<div class="slds-col slds-size_1-of-2">
<lightning-card title="Contact Information">
<lightning-input-field field-name="FirstName"></lightning-input-field>
<lightning-input-field field-name="LastName"></lightning-input-field>
<lightning-input-field field-name="Email"></lightning-input-field>
</lightning-card>
</div>
<div class="slds-col slds-size_1-of-2">
<lightning-card title="Related Account Information">
<lightning-record-view-form
record-id={accountId}
object-api-name="Account">
<lightning-output-field field-name="Name"></lightning-output-field>
<lightning-output-field field-name="Phone"></lightning-output-field>
<lightning-output-field field-name="Website"></lightning-output-field>
</lightning-record-view-form>
</lightning-card>
</div>
</div>
</lightning-record-edit-form>
</template>
JS
import { LightningElement, track, api, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
const FIELDS = [
'Contact.AccountId'
];
export default class Tst2 extends LightningElement {
@api recordId;
@track record;
@wire(getRecord, { recordId: '$recordId', fields: FIELDS })
wiredContact({error, data}) {
if(data) {
this.record = data;
} else if (error) {
alert(error);
}
}
get accountId() {
return this.record ? this.record.fields.AccountId.value : null;
}
}
Metadata
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>46.0</apiVersion>
<description>Tst 2</description>
<isExposed>true</isExposed>
<masterLabel>Tst 2</masterLabel>
<targets>
<target>lightning__RecordPage</target>
</targets>
<targetConfigs>
<targetConfig targets="lightning__RecordPage">
<objects>
<object>Contact</object>
</objects>
</targetConfig>
</targetConfigs>
</LightningComponentBundle>
Result

How to deal with custom UI?
Here I see two option:
Option 1: Use only SLDS CSS classes for standard components. Because, custom wouldn't apply due to LWC Shadow Dom.
Option 2: Use workaround for overriding standard components styling, which I described here.