How can i modify it so nodes do not overlap each other alot and can show
edges?
Graph going to be huge (Millon of nodes) so what is best algorithm for it ?

below is my result and code of 70k nodes (email conversation) :

How can i modify it so nodes do not overlap each other alot and can
show edges?

You should change the node size and the edge width.

Graph going to be huge (Millon of nodes) so what is best algorithm for
it ?

It probably does not matter. If your graph is so large and is not
low-dimensional like a lattice or a tree, it it is too large it almost
always will look like a huge blob with any algorithm.

I would like to determine the fractal dimension of the graph. I can
assigned a "geometric distance" between each pair of vertices,
therefore, I could also assign each edge a "length". One thing I could
do is to somehow define a center and then count the the number of the
nodes within "a circle" with increasing "radius". See how the number of
the vertices scales with the increasing radius.

I wonder Is there any other ways to calculate the fractal dimension
using some features from any graph-tool functions? Can I estimate the
fractal dimension from the adjacency matrix maybe? I would appreciate
any advise.

There are no implementations of fractal dimension in graph-tool.

Note that this is an active area of research, and there is no
universally accepted definition of a generalized fractal dimension for graphs.
I think the most famous method is:

So I have here a graph with N vertices and M edges. Given a subset of n
vertices, I would like to count how many edges are there between these n
vertices of the subset. Is there any existing graph-tool function that
can be used for this task?