Pong is an extremely simple game, and it is easy to over-engineer.
I'd ignore the comments about classes for Pong. The code you've got there does not need them.
The only variable really are the position and velocity of the ball, the position of the paddles, and the scores. You can add more fluff, but that's all the game requires. That does not lend itself to game objects with classes and interfaces and interdependencies. I've put together a pong game for the Challenge this month and it was about 90 lines before I started adding the fluff. Pong does not need to be complex since typically the complex stuff of graphics and sound are handled by libraries.
That is partially why Pong it an excellent beginner exercise. Larger projects certainly need it, but this doesn't.
For a code review...
Lines 15-47, you don't need to make all of those static. Global variables are static by definition.
I thought it was interesting that you made some global constants, but you also scattered numbers around the code. You should probably put all your constants up there, but more on that below.
Overall you place multiple statements on a single line, that is not a typical pattern. For example, lines 69-75 contain 32 statements. Why did you do that? Typical C++ code has one statement per line, even one declaration per line in most cases. Trying to cram 32 statements into 6 lines makes the code difficult to read.
If each is a block of functionality, consider adding a comment to each block, or pulling it out to a function.
From your code example, perhaps instead of three lines, try this:
//Old code, this seems difficult for me to read
ball.setRadius(10); ball.setOrigin(10, 10); ball.setFillColor(ball_color); ball.setPosition(640, 360);
paddle1.setFillColor(paddle1_color); paddle1.setOrigin(8, 60); paddle1.setPosition(35, 360);
paddle2.setFillColor(paddle2_color); paddle2.setOrigin(8, 60); paddle2.setPosition(1245, 360);
// Suggested version
// Initialize ball and paddles
ball.setRadius(10); //TODO: Replace all these numbers with named constants
ball.setOrigin(10, 10);
ball.setFillColor(ball_color);
ball.setPosition(640, 360);
paddle1.setFillColor(paddle1_color);
paddle1.setOrigin(8, 60);
paddle1.setPosition(35, 360);
paddle2.setFillColor(paddle2_color);
paddle2.setOrigin(8, 60);
paddle2.setPosition(1245, 360);
In that snippit of code you've got a lot of magic numbers. These are difficult to maintain. It is usually easier to provide named constants that are all found in one convenient location. Then you can change one constant and it is reflected everywhere in the code. As written you may decide you want to change the paddle origin value from 60 to 48, and so you'll be searching the code for everywhere that has a 60 in it. Then when you find a 60, you'll need to make sure it is the right 60 and not used for something else. And even then, maybe for some reason you didn't use 60 but were using another value to represent something, or maybe you already added to values together but now you want to modify one of them. Lots of reasons, always use named constants. They should be added up near your other constants used for colors up around line 20.
As for dividing code between files, typically the approach is to block them together by functionality, which usually means by feature or by class. Sometimes a third file will be used when using something like the pImpl paradigm, where the publicly used interface doesn't need to contain all the inner details which can help reduce build times on large projects.
For organization, it depends. Often (but not always) directory hierarchies follow namespace hierarchies, and often (but not always) large subsystems and external subsystems go in their own hierarchies. The exact details vary from project to project depending on what works for the team.
Overall it looks good for this skill level, and looks like it does the job of being a good pong clone.