I'm Matt; I'll be co-mentoring the scipy.diff project if a proposal is selected, so my answer is geared towards that.
It seems that you have found
https://github.com/scipy/scipy/wiki/GSoC-2017-project-ideas as you wrote "implement scipy.diff (numerical differentiation)". If you haven't already followed the recommended reading links, I would continue with those. Read carefully, researching things you're not familiar with.
I suggest that you adopt the liberal interpretation of 'numerical differentiation' - the evaluation of the numerical values of derivatives - rather than the more restrictive definition of 'finite differences'. Please research and consider the pros and cons of the various methods of evaluating the numerical values of derivatives, including automatic differentiation and complex step methods.
Before writing a proposal, consider the following:
What are some common applications that require numerical derivatives, what differentiation methods are most suitable for these applications, and how does that information suggest what capabilities scipy.diff should have?
What algorithms can you find (in academic literature and textbooks), and under what determines which is best for a particular application? Which can you hope to implement, given constraints on time and expertise? (Your mentors may not be differentiation experts - I am not - so you might have to find answers about complicated algorithms on your own!)
What existing code can you draw from, and what shortcomings of that code will you need to address? (Check bug reports, for example.)
With all that in mind, synthesize a schedule for creating the most useful scipy.diff in the time you'll have available, and outline a path for future work.
I'll say that I'm particularly interested in derivatives for nonlinear programming, especially for solving optimal control problems using direct methods. In particular, I have Python code for evaluating the objective function and constraints, and accurate derivates can greatly improve convergence rates, so automatic differentiation (AD) is the natural choice. However, other applications may have black box functions, in which case AD is not an option. Are there situations in which AD is not possible but complex step methods can be used and would outperform (real) finite differences?
You can find more general thoughts about writing good GSoC proposals online; I but these are the things that come to my mind when I think about a scipy.diff proposal.