We are developing a game in which we have a terrain. And in that terrain we have natural borders like a small creek and a road. Essentially dividing the map into various areas/parts. On these areas we have characters. Small areas may only have one character, larger areas have 2 or 3 characters.
Now we are searching for the best way to be able to select one of the ground areas and change the texture of that area. In the end, the player can have a terrain with different types of ground, depending on what they want.

Because of the ease of editing a terrain in Unity itself we would love to use that tool. But we can only see how this can be done by using an external model with separate meshes for the different ground parts. But this makes editing the terrain a lot less flexible.

Any thoughts on what would be the best way to tackle this?

Vertex paint is coming to Unity in a near future.

I am looking for help on the same thing are you wanting to change the texture live in game?

This is how to lookup a terrain texture. Most of the work is converting the world position to the indexes in the terrain texture map. To set instead, build TerrCntrl[1,1,4], set TerrCntrl[0,0,texNum] and use SetAlphaMaps, in TerrainData, in the Unity manual:

// public so we can see them in the Inspector and double-check:
public Vector3 TS; // terrain grid-space size
public Vector2 AS; // control texture size

TS = Terrain.activeTerrain.terrainData.size;
AS.x = Terrain.activeTerrain.terrainData.alphamapWidth;
AS.y = Terrain.activeTerrain.terrainData.alphamapHeight;

// World position of what I'm looking up is puffPos:
// get (AX, AY) indexes into terrain array:
int AX = (int)((puffPos.x/TS.x)*AS.x+0.5f);
int AY = (int)((puffPos.z/TS.z)*AS.y+0.5f);
// Get the (1 by 1 by #terrainTextures) array of texture weights at our position:
float[,,] TerrCntrl = Terrain.activeTerrain.terrainData.GetAlphamaps(AX, AY,1 ,1);
// NOTE: say there are 5 terrain textures. the last slot of TC goes from 0-4 and
//       TC[0,0, 0-4] add to 1

// In my case, I wanted the 5th terrain texture:
float c1=TerrCntrl[0,0,4];
if(c1>0.5f) // standing on grass