It seems that the relative and absolute changes are calculated internally by the go.Indicator method (meaning that you can't customize the text to be displayed next to the delta symbol), and that you have to choose between relative or absolute change to be displayed.
The simplest solution would be to add a text annotation. However, standalone text isn't a graph_object, but is rendered over the figure. This means the text can overlap other graph objects in the figure.
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Indicator(
mode = "number+delta",
value = 200,
number = {'font': {'size': 30}},
title = {'text': 'HEAD', 'font':{'size':20, 'color':'green'}},
domain = {'x': [0, 1], 'y': [0, 1]},
delta = {'reference':300, 'relative':False})
)
fig.add_annotation(x=0.5, y=0.4, text="-30%", font=dict(color="red"), showarrow=False)
fig.show()
The figure looks okay with a fairly large browser window:

But when you resize the browser window, the text annotation can overlap the go.Indicator object which is ugly:

A better but hacky solution is to add three different go.Indicator objects as traces: the first two go.Indicator objects will display relative and absolute changes but we will set the font color of the numbers to be the background color so they aren't visible. Then the third go.Indicator object adds the number 200 and the title HEAD without showing the delta. The last thing is to set the domain of each of these go.Indicator objects accordingly so that they don't overlap as you resize your browser window.
You can adjust the domain of each of these traces to get you closer to the result you're looking for.
fig = go.Figure()
# the first two traces are just the delta with the value set to the background color
fig.add_trace(go.Indicator(
mode = "number+delta",
value = 200,
number = {'font': {'size': 30, 'color':'rgb(255,255,255,0)'}},
domain = {'x': [0, 0.8], 'y': [0, 0.8]},
delta = {'reference':300, 'relative':False})
)
fig.add_trace(go.Indicator(
mode = "number+delta",
value = 200,
number = {'font': {'size': 30, 'color':'rgb(255,255,255,0)'}},
domain = {'x': [0.2, 1], 'y': [0, 0.8]},
delta = {'reference':300, 'relative':True})
)
## this adds the title and value
fig.add_trace(go.Indicator(
mode = "number",
value = 200,
number = {'font': {'size': 30}},
title = {'text': 'HEAD', 'font':{'size':20, 'color':'green'}},
domain = {'x': [0, 1], 'y': [0, 1]})
)
fig.show()
This is what the figure looks like with a large browser window:

When you resize the browser window, the go.Indicator traces remain distinct:
