I found out how to do it.
TLDR: search for "points allocated" rather than the final value. There are three locations, and you'll need to use Cheat Engine's "pause" option to change them all safely. Max value is 255.
Excessive detail here:
Understand how the data is stored.
The "display" value is only for display, so it's not something that you want to edit. The important value is how many attribute points have been allocated.
Allocated points are stored in an unsigned byte, so they are limited to +255 points per attribute.
The allocated points are stored in three places which need to be changed at the same time to avoid any messy explosions.
Strength is the easiest to work with because it's the first memory address. There are 6 bytes next to each other, and Strength is the first in all three locations.
Loading a game will move these variables around in memory, so an existing address won't work if you run out of points and have to reload.
Cheat Engine can do a hundred things other than just find changed memory addresses. For this, we start with the address search and then add one more special trick.
Load up your brand-new character with 0 attribute points allocated. You'll need at least 3 extra points for cheatengine to narrow down the three memory addresses containing this value.
You really just need one attribute where you know exactly how many points have been allocated, whether that number is 20 or 0.
If you have added an unknown number of points to each attribute, you could try searching for unknown numbers that increase by 1. This should work but I think it'll take a lot of iterations.
Regardless, search for the number of points allocated to a single attribute. This is the basic part!
Once you have all three locations marked, you should Browse This Memory Location to see if the numbers make sense.
Click the Advanced Options at the bottom-left corner of the Cheat Engine window, and then click the Pause button on the Code List window that pops up.
Set each value to something nice like 250 (0xFA), or whatever you want them to be. I pick 250 so it's unlikely that I'll accidentally add enough points to roll it back down to +0.
Once all 18 values have been set, unpause the game.
The final numbers are calculated when you add another point. So maybe you should do that now.
This works perfectly well, and as long as you don't try to add 256 points, you'll be fine.