I want a chunk that contains variables that can be modified when calling the chunk. So I have my nice little chunk {{downloadbox}} with a load of empty divs in. I then want to be able to able to add content to these empty divs using variables when calling the chunk.
A chunk cannot do any logic, it is just a place holder for html. I think that you would need to have a snippet and load the chunk dynamically. You could use the modx api functions to set placehoders and then load the chunk or you coudl do the layout within the snippet itslef and just return the layout.
Here is an API example for setting placeholders and retrieving a chunk:
http://wiki.modxcms.com/index.php/Creating_Snippets#Snippets_and_plugins_should_not_contain_presentation_layer_code
To make a file download system use a document for each download file (add Template Variables to add custom fields like file url or thumbnail). Then you can present the files with Ditto and add a few search filtering tools (can be built with tvExplorer snippet) and meybe even add commenting (can be done with Jot snippet). FileDownload (snippet + plug-in) can be used to present the file for download.
The modx site structure could look like this, where File Category # represent the different categories and File # represent the download documents:
-Home
-Downloads
--File Category 1
---File 1
---File 2
---File 3
--File Category 2
---File 4
---File 5 ...
-Search
-Contact
- Etc..
Instead of using categories you could also use tags and filter with Ditto.
This is how I would do it, that does not mean that this is the best way to do it though, but it looks like it would work.