There are some documents that explain very well the limits of the PC Engine. One of them is the HTML file that comes with the HuC compiler (I began with that document). Another document is one text file made by BT Garner years ago; it is very well written and it's very good for beginers! Also, studying the source code of some examples that you can find in the Zeograd page is a good idea too (for example the Pong game by Zeograd, or the Echo game by Trilinear are very self-explaining).
I can tell you some of the details of the PC Engine hardware now, but my memory is not good, so seeing those documents is a better idea than read me
In any case, I will try to tell you some basic things: the standard resolution of the screen is 256x224. I strongly recommend you that you begin programming with that resolution. When you gain experience, you can use bigger horizontal resolutions until 512x224 (the vertical resolution cannot be expanded in the same way) but this requires more skill in programming and in drawing.
Keeping in mind that the resolution is 256x224, you can define the background and the sprites. At first you can use a static background of 256x224 pixels: a simple picture that does not change (see the Pong example). You can use a real picture if you want, converted to 16 colors. In the future, if you want to make a scrolling background, it will be mandatory to use TILES, and this is a bit more advanced concept, so let´s begin with a static background and practice to move sprites in it.
As far as sprites is related, you can define sprites of 16 or 32 pixels width, and 16, 32 or even 64 pixels height. For example, the bigger sprites in PC Engine are 32x64 pixels. If you need to draw a big monster, you can draw two sprites together to build that big monster
In theory you have a limit of 64 sprites that you can have defined at a time, but in practice you will use a smaller number.
You must know the difference between SPRITE and PATTERN. This is very important. Let´s see an example: one SPRITE in Double Dragon is the guy that you control (Billy Lee). And you must load in VRAM memory all the PATTERNS related to Billy: all the images related to all the movements that Billy can do (Billy punching, Billy walking, Billy jumping...). So, the limit of 64 SPRITES is the limit of "characters moving on screen". It is not the limit of "different poses" that you can have in the game: those are the PATTERNS, and they are loaded in VRAM. So, one limit that you must know is that VRAM is very limited, and you must load in this VRAM memory all the data related to sprites, tiles and so on. So, let's use the VRAM with caution.
You must know that you can rotate a sprite. So, if you load a pattern of "Billy punching to the left", it is not needed that you load "Billy punching to the right". You can simply rotate the first sprite. In this way, you save a lot of VRAM!!
Another important thing is that sprites have a TRANSPARENT color. it is the color that surrounds the silouette of Billy in that 32x64 rectangle. The transparent color is not drawn, so you can see the background. And of course, all the sprites and tiles must be converted to 16 colors. I recommend you that you use a single PCX to draw all the poses of Billy, and convert that PCX to 16 colors. In this way, all the patterns of the sprite "Billy" share the same palette.
There is also a limit of the number of palettes that you can use: 16 palettes for sprites and 16 palettes for the background. I recommend that you begin using 1 palette for the background, and 1 different palette for each sprite. In the thread "full-color backgrounds" we discused about using several background palettes, but this is an advanced concept.
Finally, think that if you have something loaded in VRAM and drawn in the screen, and you MODIFY the data loaded there, you will see the changes in the screen. So be carefull with this. For example, if you change the color of a palette, all the sprites that use this palette will be affected.
I forgot to say that the screen is "refreshed" several times per second. I recommend you that you make a loop in your game, and you call at the end of this bucle the functions satb_update and vsync. The first (satb_update) updates the table of sprites with the changes that you have made (position of each sprite, pattern used, rotation...) and the second one "draws" all in the screen at the correct moment.
Good luck, and feel free to ask questions. There is a lot of nice people between the PC Engine developers, as you have seen yet.