One idea could be to define y values for all x for both red and green patches. However for low x-resolution the patches will not intersect at proper values (I have added some data points to your data in the example below).
df_org = pd.DataFrame({'x':[1,2,3,4,5], 'y0':[10,20,15,30,25], 'y1':[14,22,11,32,20]})
df = pd.DataFrame({'x':[1,2,2.3,3,3.65,4,4.3,5], 'y0':[10,20,19,15,25,30,28.5,25], 'y1':[14,22,19,11,25,32,28.5,20]})
df['y0>y1']=df.apply(lambda x:x['y1'] if x['y0']>x['y1'] else x['y0'], axis = 1)
x_patch = np.append(df['x'], df['x'][::-1])
y_red = np.append(df['y0'], df['y0>y1'][::-1])
y_green = np.append(df['y1'], df['y0>y1'][::-1])
p = figure(plot_width = 800, plot_height = 500)
p.line(x=df_org['x'], y=df_org['y0'], line_color = 'red')
p.scatter(x=df_org['x'], y=df_org['y0'], line_color = 'red', size = 6, marker = 'circle')
p.line(x=df_org['x'], y=df_org['y1'], line_color = 'green')
p.scatter(x=df_org['x'], y=df_org['y1'], line_color = 'green', size = 6, marker = 'square')
p.patches(xs=[x_patch, x_patch], ys = [y_red, y_green], color=['red', 'green'])